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

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

[复制链接]
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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版