OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5501|回复: 1

RS485 程序疑惑 关于RS485发送数据程序

[复制链接]

61

主题

348

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1403
金钱
1403
注册时间
2021-4-28
在线时间
525 小时
发表于 2021-7-7 11:03:36 | 显示全部楼层 |阅读模式
5金钱

/RS485发送len个字节.
//buf:发送区首地址
//len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)



void RS485_Send_Data(u8 *buf,u8 len)
{
     u8 t;
         RS485_TX_EN=1;              //使能发送模式
         for(t=0;t<len;t++)
            {
                               
                   while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);
                        USART_SendData(USART2,buf[t]);
                                                       
                }
               
                  while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);                
                  RS485_RX_CNT=0;  //数据发送完成 清零接收数据位数
              RS485_TX_EN=0;       //使能接收模式

}



以上是原子哥代码,不理解的是
               
                   while(USART_GetFlagStatus(USART2,USART_FLAG_TC) == RESET);       //这都还没发送数据,发送完成标志一直为0,在这里不应该死循环了吗,进入不了下行发送程序了
                        USART_SendData(USART2,buf[t]);


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

61

主题

348

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1403
金钱
1403
注册时间
2021-4-28
在线时间
525 小时
 楼主| 发表于 2021-7-7 11:04:08 | 显示全部楼层
TC:发送完成 (Transmission complete)
当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。如果USART_CR1中的
TCIE为’1’,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。TC
位也可以通过写入’0’来清除,只有在多缓存通讯中才推荐这种清除程序。
0:发送还未完成;
1:发送完成。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 07:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表