STM32CUBEMX(8)--USART通过定时器中断方式接收不定长数据
本文利用中断实现串口不定长接收(非DMA),使用HAL库,将接收的数据打印出去。
硬件准备
首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板。

选择芯片型号
使用STM32CUBEMX选择芯片stm32f030r8,如下所示:

配置时钟源
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

配置时钟树
STM32F0的最高主频到48M,所以配置48即可:

串口配置
本次实验使用的串口1进行串口通信,波特率配置为115200。

中断

GPIO配置
板子上led为PA5端口,故设置PA5闪烁来验证是否正确。

定时器配置
本次实验使用的是TIM3来进行计数。

在上面配置TIM3参数,预分频系数设置为480-1, 自动重载值设置为10000-1,那么PWM频率为48,000,000/((480-1+1)*(10000-1+1))=10Hz,即 100ms一个周期。

生成工程设置
注意在生产工程设置中不能出现中文,不然会报错。

代码生成设置
最后设置生成独立的初始化文件。

生成代码

配置keil

代码
在main.c中,先加入头文件。
定义变量存储。
定义printf的重定向函数fputc。
打开串口和定时器。
串口接受代码,当接受到最后数据为FF时候,直接打印,否则等待100ms打印。
演示效果
可以看到 发送11 12 13需要等待100ms左右才能发送,如果最后加上ff直接发送。
教学视频
