网站正在建设中的英文企业网站建设合同书标准版
web/
2025/10/4 1:23:53/
文章来源:
网站正在建设中的英文,企业网站建设合同书标准版,com域名注册商,大学生兼职网站策划书今日尝试配通俩个C8T6单片机之间的无线串口通信#xff0c;文章提供原理#xff0c;源码#xff0c;测试效果图#xff0c;测试工程下载#xff1a;
目录
传输不规范问题#xff1a;
串口通信资源#xff1a;
单个串口资源理解#xff1a;
单片机串口资源#xf…今日尝试配通俩个C8T6单片机之间的无线串口通信文章提供原理源码测试效果图测试工程下载
目录
传输不规范问题
串口通信资源
单个串口资源理解
单片机串口资源
测试目标与测试硬件连接
串口初始化与串口中断接收逻辑
串口初始化
初步测试能否收发 阶段测试效果
规范接收
几个串口配置方面的注意点
测试接收 今日学习加强 俩片单片机之间的串口通信
单片机的串口通信要想配置好发送与接收都很简单如果没有任何意外我们甚至不需要定义过于规范的 帧头、帧尾 就能实现最简单的俩个单片机的通信 传输不规范问题
但在实际的数据传输的过程中难免会出现
1.某次传输不小心丢失数据该次传输所得需作废。
2.发送 或者 接收 了一次偶尔的错误帧。
3.发送方开机比较快接收方的第一个数据是从中间开始接收的。
............
以上这些不对劲的接收情况的数据是需要直接剔除的直到接收到正确的数据。 本文会使用一个额外的无线通信模块大家可从下文了解其配置如果有自己的无线串口模块一样配置好接上使用即可没有无线串口模块可以勉强使用杜邦线代替但用杜邦线就模拟不了误传情况了~ DL_20无线串口模块_NULL指向我的博客-CSDN博客 串口通信资源
单个串口资源理解
引脚方面STM32每一个串口都有至多五个引脚有的串口只有TX RX 1.TX 和 RX 发送与接收 2.SCLK 时钟 3.nRTS 请求发送 4.nCTS 允许发送 其中最常用的、必不可少的就是TX与RX了SCLK是同步时钟是同步通信时用到的而我们此次的无线通信属于异步通信因此用不到3、4是硬件流控制的引脚我们也用不到。 单片机串口资源
这是我之前文章总结的串口资源 STM32 F103 C8T6共有三个串口 这里其余没有特别需要注意的地方但在初始化时USART1与2、3有区别我们除了更改引脚之外同时需要注意
USART1是挂载在APB2总线上的外设接口更快而其余俩个串口都是挂载在APB1总线上的因此在初始化开启端口时钟时此处需要额外注意。 测试目标与测试硬件连接 测试目标 1.实现俩片单片机的无线通信 2.单片机1的串口1 接无线通信模块并不断发送数据 3.单片机2的串口1接无线通信模块接收单片机1的数据串口2接串口转USB模块将接受到的数据回传到上位机电脑注意有没有安装CH340等类似驱动 串口初始化与串口中断接收逻辑
串口初始化
这部分不用细讲本文主要是写串口接收方逻辑串口初始化配置方面不清楚的可以看这篇文章 STM32 F103C8T6学习笔记3串口配置—串口收发—自定义Printf函数_NULL指向我的博客-CSDN博客 初步测试能否收发 单片机1的程序带有一个定时器每秒使用串口1发送12345的程序串口1是连接了无线模块的因此同样在串口1连接了无线模块的单片机2会在串口1中断接收到这个数据而我们先不写任何判断接收到就返还数据看看~进行初步的测试这个过程的测试程序没法存下任何有用的数据只是简单的返还而已
单片机1 定时器每秒进中断使用串口1发送一次12345 单片机2 串口1中断接收到数据 直接通过串口2链接了串口转USB模块外传给上位机 阶段测试效果
下载程序到俩个单片机查看阶段测试效果
测试结果中看似一给单片机1通电了单片机2就能收到信息反馈给上位机分毫不差但这个过程单片机2其实并未将数据保存下来也就是它并不知道自己接受到的是怎么回事只是无脑地转发消息罢了 规范接收 几个串口配置方面的注意点 1.俩片单片机收发的时间点要岔开严格杜绝一个程序都写了收和发却下载给俩个单片机这样容易会使得俩个单片机变成“永动机”卡在那建议刚开始就单个只管发送关闭接收中断另一个只管接收 2.注意其他中断源尤其是定时器中断即使是1s进一次定时器中断也可能会对接收方的串口中断、主程序CPU处理过程 造成毁灭性的打断时机不凑巧因此在进入主程序处理接收操作时应该要想办法关闭其余中断处理完毕再打开其余中断。 3.注意标志位的正确时机勿忘记清除中断标志位数据接收完成标志位数组缓存下标甚至是缓存数组也要在处理完后及时清零。 4.其余配置有中断的外设如果在系统运行时有进入中断的时机尤其是定时器溢出中断这个必定会进一定要给其配好中断服务函数并且中断服务函数要写好清除标志位等退出中断的操作否则程序容易在中断服务函数那卡住。 这样接收就能将数据存在数组进行下一步处理了
#include USART1.hchar usart_buf[25];
char usart_flag0;
char usart_xb0;void USART1_IRQHandler(void)
{//接收中断if(USART_GetITStatus(USART1, USART_IT_RXNE) ! RESET){//清除标志USART_ClearFlag(USART1, USART_FLAG_RXNE);//数组承接数据usart_buf[usart_xb]USART_ReceiveData(USART1);//如果接收到数据结尾if(usart_buf[usart_xb]\n usart_buf[usart_xb-1] \r) {usart_flag1;}//下标最大不超25if(usart_xb25) {usart_xb0;memset(usart_buf,0,sizeof(usart_buf));}//下标移动usart_xb;}}//确保你已经包含了相应的头文件例如#include stm32f10x.h。
// __enable_irq(); // 开启总中断
// __disable_irq(); // 关闭总中断
// __disable_irq(); // 屏蔽中断
// __enable_irq(); // 恢复中断void handle_uart1(void)
{if(usart_flag1){__disable_irq(); // 屏蔽中断UsartPrintf (USART2,\r\n);UsartPrintf (USART2,%s,usart_buf); usart_xb0;memset(usart_buf,0,sizeof(usart_buf)); //处理完命令别忘了将数组清零以便接收下个命令usart_flag0;__enable_irq(); // 恢复中断}
}
测试接收
接收情况正常 测试工程下载 https://download.csdn.net/download/qq_64257614/88212346?spm1001.2014.3001.5503
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86528.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!