1、串口
选择好使用的MCU后,首先选择外部晶振。
修改一下DEBUG功能,否则后续无法调试
打开全局中断
配置时钟频率,由本人实验使用的mcu型号为STM32F407ZGT系列,所以直接在图示位置输入最高频率168,按回车,软件自动配置其他时钟,若为F1系列,则此处输入72
设置文件名、保存的地址以及编译软件
将所有外设放入不同的源文件,方便查阅,最后点击生成代码
添加头文件,重定向,以便能够使用printf函数
HAL_UART_Receive_IT(&huart1,(uint8_t*)&rx,sizeof(rx));
huart1是串口号,rx是接受缓存区,第三个参数是缓存区大小,只有当缓存区满了才会触发中断,改函数调用一次只能触发一次中断,需要在中断函数中重新调用改函数来继续接受数据。
添加自己的中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
该函数为中断回调函数,若要连续接受数据,则一定要在中断函数结束时重新调用HAL_UART_Receive_IT,开启接受中断
2、串口+DMA+空闲中断
开启串口全局中断
添加串口接受dma,选用normal模式即可
生成代码打开文件:
创建接收缓存区
开启空闲中断和DMA
在中断回调函数中,首先判断中断类型,且先将dma传输关闭,防止当前数据受影响,中断函数结尾再重新将DMA传输开启,继续接收数据
在标准库中,通常采用串口+DMA+空闲中断来接收一段不定长数据