stm32串口通信协议简单教程

stm32串口通信协议简单教程

ID:1250998

大小:1.58 MB

页数:11页

时间:2017-11-09

stm32串口通信协议简单教程_第1页
stm32串口通信协议简单教程_第2页
stm32串口通信协议简单教程_第3页
stm32串口通信协议简单教程_第4页
stm32串口通信协议简单教程_第5页
资源描述:

《stm32串口通信协议简单教程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、STM32串口通信协议简单教程一、修改串口UART1IT工程模版用KeilMDK打开短学期资料中的工程示例→串口→UART1IT示例,查看main.c代码如图1所示:图1UART1IT串口示例代码打开文件列表中的stm32f10x_it.c文件,找到UART1中断函数如图2所示代码:图2UART1串口中断函数为方便起见,将整个USART1_IRQHandler函数剪切到main.c文件末尾如图3所示。并删除stm32f10x_it.c文件中的sp变量定义,如图4所示。图3移动串口中断函数图4去除stm32f10x_it.c中的sp变量声明重新编译一次工程,看看

2、修改是否出现错误,编译失败出现错误则需仔细检查刚才的修改是否正确。编译成功,下载工程到实验板,关闭下载程序。将实验板BOOT跳线至正常运行模式并重新上电。打开串口调试助手,选择实验板USB虚拟串口并打开,如图5所示。可以看到图中窗口不停的接收到“Helloworld!”这样的字符串数据。在发送区域输入字符1,点击发送按钮,可以观察到实验板的流水灯速度变快了很多。图5PC端串口调试助手和STM32进行串口通信二、简单串口协议实现1.发送按键状态首先,了解串口协议要求如下:协议数据帧头:0x360x4D(2字节)协议数据帧尾:0x0D(1字节)校验方式:帧头

3、与有效数据的单字节加和ASCII码(2字节)如0x360x4D0x2B0x31加和为0xDF,那么最后的校验码为0x440x46两个字节,实际发送帧为0x360x4D0x2B0x310x440x460x0D按键状态单片机发送:帧头+0x4B+键码+状态+校验和+帧尾其中键码用0x32和0x33对应按键K2和K3,状态0x44和0x55对应按键按住和松开在main函数之前,添加按键扫描代码如图6所示,然后在main函数中,添加sendstr数组,key和oldkey两个整数变量,如图7所示。图6添加按键扫描函数图7添加相关变量接下来,在main函数的while

4、主循环中,添加发送按键状态代码如图8所示。同时,将main函数中的Helloworld字符串发送行注释掉,如图9所示。为使按键响应灵敏,可以将main.c文件开头的sp变量初始值由100改为10。注意,资料包里面的串口调试助手UartAssit软件容易造成虚拟串口占用,甚至使系统崩溃。考虑到使用方便,推荐使用sscom42软件。这里给大家一个下载地址http://www.uzzf.com/soft/53912.html图8main主函数中的发送按键状态代码图9注释Helloworld发送行编译并下载程序后,接上串口调试助手,我们可以看到调试助手窗口中的结果如图

5、10所示。由图中可以看到,调试助手接收到”6MK2D6MK2U”,这表示实验板按键K2被按下和放开两个动作。图10串口调试助手结果接下来,为完成协议要求,在main函数之前添加校验码函数代码如图11所示。图11添加校验码函数代码在发送按键状态帧之前,添加校验码函数如图12所示。图12添加校验码操作编译并下载程序后,接上串口调试助手,可以看到STM32串口发送按键状态数据帧如图13所示。如图中所示,当按键K3按下时,STM32发送“6MK3D45”,其16进制数据为“364D4B334434350D0A”,0x36+0x4D+0x4B+0x33+0x44=0x0

6、145,保留一个字节则为0x45。0x45表示为两字节ASCII码,就是字符’4’和字符’5’,即对应“6MK3D45”最后两个字符。由此可知,按键状态发送功能完成。图13完整的按键状态发送效果2.接收亮灯控制命令简单的亮灯控制命令如下所示:PC端发送亮灯:帧头+0x2B+灯号+校验和+帧尾其中灯号为1~8的ASCII码,即0x31~0x38PC端发送灭灯:帧头+0x2D+灯号+校验和+帧尾修改串口接收中断函数如图15、图16所示。在接收中断函数中,使用了类似于状态机的接收方法。变量fsm用于表示当前状态,接收亮灯控制命令时,简单的状态转换图表示如图14:01

7、2100x360x4D0x2B0x31~0x38525150图14亮灯命令接收状态转换图图15串口接收中断程序1图16串口接收中断程序2编译并下载程序,接上串口调试助手。如图17所示,在调试窗口中选中“HEX发送”,然后在下方的发送行填入字符串“364D2B3100000D”。点击“发送”按钮则可以看到接收栏中显示“OK!”字符串。在此,校验码0x000x00没有任何意义,只是占个位置。图17串口调试助手发送数据接下来,在main函数之前添加接收数据校验函数如图18所示。图18接收数据校验函数修改串口接收中断中的帧尾回送OK字符串程序行,如图19所示。为了看到

8、显示效果将main函数中的流水灯部分代

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。