一.项目概述 设计采用STM32F0系列单片机做主控芯片,通过DHT11采集温湿度,将温度显示在OLED 屏幕上.根据温度的不同,利用STM32对风扇进行调速,总体硬件设计如下图所示 1.效果展示 2.主要功能 传感器检测外界温度和湿度并在OLED 屏幕上实时显示出来,当传感器检测到外界温度超过36摄氏度时,单片机便会控制风扇打开. 二.硬件部分 STM32F0最小系统(集成了OLED屏幕插座).DHT11温湿度模块.带风扇的电机驱动模块 开发环境 keil5.STM32CubeMX.STM32…
说明: 1.该工程基于HAL库实现动态存储器SDRAM驱动以及液晶控制器LCD驱动. 2.工程通过STM32CubeMX(Version 4.22.0)配置生成,可直接打开进行配置. 3.KEIL MDK版本Version5.17 功能: 基于emwin图形库实现液晶显示,实时显示触摸值. 截图: 工程包下载地址: 链接:https://pan.baidu.com/s/1slIAOC9 密码:4ssy GMT43液晶模块购买链接:…
写在前面 最近需要使用一款STM32L4系列的芯片进行开发,需要学习使用HAL库.在进行串口中断使用的时候遇到了一些小麻烦,写下解决方案供大家参考. 1.UART相关的头文件引用错误 由于本人直接使用MDK进行开发,没有使用CubeMX,所以一些初始化需要手动进行.在引用UART相关的头文件时,记得将"stm32l4xx_hal_conf.h"文件中的相关宏定义取消注释,如下图: 2.如何接收字符串(多次进入中断) 接收字符串主要有两种方法,一种是对中断函数进行改造,另一种是对接收回调…
通过STM32CUBEMX生成DMA读写sdio的工程,再读写过程中总会卡死在DMA中断等待读写完成的while中,最终发现while等待的标志在SDIO的中断里置位的,而SDIO中断优先级如果小于或等于DMA中断优先级,则SDIO中断永远不能抢占DMA中断,DMA处于持续等待中,解决办法由两种,一种是直接提高SDIO中断优先级到比DMA中断优先级高,第二种是直接在HAL库中卡住的中断等待函数中注释掉while等待. 另外还有一点就是在SDIO数据读写的时候需要注意的两点,一个是读写数据最好四字…
先上一个采用串口直接传输的Demo: 此处的思路是完全采用HAL库来实现的,核心是运用HAL_UART_Transmit_IT和HAL_UART_Receive_IT两个函数来实现的,可以作为一个Demo来测试使用: 直接上代码,其串口的配置和上一章完全一致,因此忽略不计: 思路大致是将aTxStartMessage字符串发送出去,接收一个总长度为15个字符的数据到aRxBuffer中,等待接收完毕: 将接收到的aRxBuffer发送出去,等待发送完成,最后将aTxEndMessage发送出去:…
1 . 建立工程,生成代码时选择包含所有库.   2. 打开 option for target 选择 Target 标签,在code generatio中,将floating point hardware 选择 USE Single Precision.   3.  打开 option for target 选择 C/C++ 标签 在define后添加:__TARGET_FPU_VFP,ARM_MATH_MATRIX_CHECK,ARM_MATH_ROUNDING,ARM_MATH_CM4,_…
基础认识 为什么要有时钟: 时钟就是单片机的心脏,其每跳动一次,整个单片机的电路就会同步动作一次.时钟的速率决定了两次动作的间隔时间.速率越快,单片机在单位时间内所执行的动作将越多.时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令.时钟系统就是CPU的脉搏,决定cpu速率. 为什么这么多个时钟源: STM32系统是复杂的,高精度.低精度.高速.低速等,且可以对每个时钟源进行开关操作,可以把不需要使用的关闭掉.这可以让单片机适用更多的环境中,把选择权利交个了开发者,开发者可以从精…
一.基础认识 GPIO全名为General Purpose Input Output,即通用输入输出.有时候简称为"IO口".通用,说明它是常见的.输入输出,就是说既能当输入口使用,又能当输出口使用.端口,就是元器件上的一个引脚. 输入模式和输出模式是GPIO的基本特性,当然GPIO还有其它模式可选. (一) IO耐压问题 STM32是一款3.3V电压的芯片,IO输出是3.3V,但IO大部分都是可以容忍5V电压输入.一般在芯片手册的"引脚定义"章节可以查看到有FT标…
UART.c #include "stm32f1xx_it.h" #include "LED.h" #include "UART.h" #include "string.h" UART_HandleTypeDef huart1; UART_HandleTypeDef huart3; #define RXBUFFERSIZE 4096 //最大接收字节数 char RxBuffer1[RXBUFFERSIZE]; //接收数据…
l  16位的向上.向下.向上/向下(中心对齐)计数模式,支持自动重装载 l  16位的预分频器 l  每个定时器都有多个独立通道,每个通道可用于 *  输入捕获 *  输出比较 *  PWM输出 *  单脉冲模式 l  高级定时器还可以产生互补输出 l  可以产生中断/DMA请求: *  更新事件:计数器向上/向下溢出,计数器初始化(通过软或者内部/外部触发) *  触发事件:计数器启动,停止,初始化或者有内部/外部触发计数 *  输入捕获 *  输出比较 一.定时器之计数模式 (一)  计数…