STM32
登录
直播中
孔朱磊
7年用户
911经验值
私信
关注
[问答]
基于CubeMX HAL库的STM32串口发送接收配置过程分享
开启该帖子的消息推送
stm32cubemx
基于CubeMX HAL库的
STM32
串口发送接收配置过程分享
回帖
(1)
卞轮辉
2021-12-10 14:39:19
/***********************************************
描述:基于CubeMX+HAL库的STM32串口发送、接收配置大全,详细内容可查看下方目录。
功能:各种常用的配置大全,可以方便的挑选合适的配置快速开发
平台:STM32F723-DISCO,除F7特有的自适应波特率外,其余配置对各种含有串口的STM32单片机均适用
作者:
Miss_若星
时间:2019/10/20
工程:博客不包含代码工程,所作更改都是基于前面的步骤
说明:因作者水平有限,不能保证100%的正确性,以下内容仅供大家参考使用,有不当之处还请指出。
**************************************************/
目录
一、串口发送
1.1、普通发送模式
1.1.1、模式配置:
1.1.2、中断配置:
1.1.3、生成代码,打开工程,在主函数的循环前面添加测试语句,输出字符串:
1.1.4、编译下载,打开串口调试助手,复位:
1.2、使用自定义printf函数
1.2.1、编写函数用于发送字符串
1.2.2、在主函数中调用:
1.2.3、测试结果:
1.3、使用标准的printf函数
1.3.1、在usart.h文件中包含头文件:
1.3.2、在用户代码区添加输出重定向代码:
1.3.3、主函数中调用:
1.3.4、测试结果同样是可以使用
1.4、半主机模式与C库
1.4.1、半主机模式
1.4.2、微库
1.4.3、标准库,禁用半主机模式,添加重定向
1.4.4、另外的调试方法
1.5、DMA发送模式
1.5.1、配置串口发送DMA
1.5.2、在NVIC菜单下配置他的中断优先级为5和6
1.5.3、生成代码,打开工程,在主函数中添加代码:
1.5.4、编译下载,复位:
1.6、DMA方式使用printf函数
1.6.1、在usart.c文件中包含头文件:
1.6.2、在用户代码区定义一个新的函数DMA_printf:
1.6.3、在头文件中声明函数,在主函数中调用。
1.6.4、下载验证:
二、串口接收
2.1、轮询接收模式
2.1.1、在CubeMX中配置
2.1.2、生成代码
2.2、中断接收模式
2.2.1、打开串口的全局中断:
2.2.2、在NVIC选项里修改它的优先级:
2.2.3、生成代码
2.2.4、编译下载
2.2.5、收发速度测试
2.3、DMA接收模式
2.3.1、配置CubeMX为DMA接收,方式选择Normal
2.3.2、设置DMA接收中断优先级为4,打开串口接收全局中断:
2.3.3、中断回调函数配置如下所示:
2.3.4、测试10个数据时没有数据丢失现象:
2.3.5、修改中断回调函数只保存,不发送
2.3.6、可以发现最终实现的效果还是很理想的
2.3.7、修改DMA为连续工作方式
2.3.8、则接收回调函数可以写成如下内容,不需要每次都重新打开DMA。
2.3.9、测试文件传输结果如下,没有数据丢失现象:
三、自动波特率
3.1.1、在CubeMX上配置为自动波特率
3.1.2、在主函数中添加一句显示当前波特率的程序:
3.1.3、编译下载
3.1.4、使用串口助手测试
3.1.5、按下按键可以看到数据成功返回:
3.1.6、同样的方法,使用其他波特率也同样适用。
一、串口发送
1.1、普通发送模式
1.1.1、模式配置:
数据长度:为包含了奇偶校验位的数据长度,上图设置为8,奇偶校验位为0.所以数据位宽就是8.
过采样:见下图
单个采样点:见下图
Overrun数据溢出检测:见下图:
接收错误时禁止DMA:详细解释参考下图:
1.1.2、中断配置:
1.1.3、生成代码,打开工程,在主函数的循环前面添加测试语句,输出字符串:
HAL_UART_Transmit( &huart6 , (uint8_t *)"hello DISCOrn" , sizeof("hello DISCOrn"), 0xFFFF);
1.1.4、编译下载,打开串口调试助手,复位:
1.2、使用自定义printf函数
1.2.1、编写函数用于发送字符串
/* used for a string send by usart */ void My_String_Printf( uint8_t* String ) { while( *String != '