你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教,如何触发串口发送中断?

[复制链接]
any012 提问时间:2016-5-3 15:50 /
悬赏1ST金币未解决
本帖最后由 any012 于 2016-5-3 15:53 编辑

从网上下载了个stm32的modbus.c文件,有些地方看不懂,来论坛求救.
供用户调用的有三个函数:
    1.void ModInit(u8 Id);                    //modbus初始化
    2.void ModRcv(void);                    //modbus信息接收,放在串口接收中断
    3.void ModSend(void);                    //modbus信息接收,放在串口接收中断
函数1和2很好理解.3就不明白了,我估计后面的注释写错了,这算是个串口发送函数,不应该放在串口中断里.
完整函数如下:
  1. /*        º¯Êý¹¦ÄÜ£ºÓÃÓÚModbusÐÅÏ¢·¢ËÍ
  2.          º¯ÊýÊäÈ룺ÎÞ¡£                                                                                                                    
  3.         º¯ÊýÊä³ö£ºÎÞ¡£        */
  4. void ModSend(void)        
  5. {        
  6.         Send_Data = *(PointToSendBuf + Send_Num);
  7.           USART_SendData(USART1, Send_Data);
  8.         Send_Num++;
  9.         if(Send_Num > (*PointToSendBuf))        //·¢ËÍÒѾ­Íê³É
  10.         {
  11.                 Comu_Busy = 0;
  12.                 *PointToSendBuf = 0;
  13.                 Rcv_Num = 0;
  14.                 Send_Num = 1;
  15.                 //Æô¶¯Êý¾Ý·¢ËÍ
  16.             USART_ITConfig(USART1, USART_IT_TC, DISABLE);//¹Ø±ÕÊý¾Ý·¢ËÍÖжϠ       
  17.         }
  18. }
复制代码

一开始我以为是将函数3放在串口发送中断里,但疑惑的是,没有触发发送中断的条件.
后来bing搜索了下,貌似USART_ITConfig(USART1, USART_IT_TC, DISABLE);这个函数,使能发送中断后,会发送个空白帧?从而引发第一次串口发送中断.
所以说,这个函数应该作为个串口发送函数放在modbus处理程序里而不是放在串口中断里?
是不是这样呢?

收藏 评论1 发布时间:2016-5-3 15:50

举报

1个回答
any012 回答时间:2016-5-3 16:01:15
仔细看了下modbus处理部分,没有调用 ModSend(void)这个函数,而只是开启了串口发送中断,用这个来触发串口发送.
ModSend(void)这个函数应该是放在串口发送中断里.不过这样的话,好象是发送中断函数里的函数又触发了发送中断,发送中断不断嵌套??

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版