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

STM32串口中断,发送数据

[复制链接]
sky_han 发布时间:2018-12-11 18:03
现在已经实现了串口发送数据和接收数据。

我想请教的是为什么串口中断一打开,我就可以在中断服务程序里,判断到TXE标志进行写数据。

这个TXE标志不应该是硬的数据从TDR到移位寄存器里的置的。
收藏 评论4 发布时间:2018-12-11 18:03

举报

4个回答
chenyang601 回答时间:2018-12-12 10:07:37
串口中断,最好在要发送的数据时,开启发送中断使能。不然,只开接收中断使能就好。这样就没有那么多问题。
sky_han 回答时间:2018-12-12 10:38:14
我就是发送的时候开的中断,我用的没有问题,我就是对技术细节有点疑问.
就是我打开中断后,第一次进中断后,判断标志,发送数据,我还没有发第一次数据,这个时候TXE标志怎么能够查询到?

void USART1_IRQHandler(void)
{
   
    MCU_INT32MU tmp_flag = 0, tmp_it_source = 0;

        #ifndef VC_PRJ
   
    tmp_flag = __HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE);
    tmp_it_source = __HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_RXNE);
    if((tmp_flag != RESET) && (tmp_it_source != RESET))
    {
        xMBRTUReceiveFSM(  );
    }
   
    tmp_flag = __HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_TXE);
    tmp_it_source = __HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_TXE);
    /* UART in mode Transmitter ------------------------------------------------*/
    if((tmp_flag != RESET) && (tmp_it_source != RESET))
    {
        xMBRTUTransmitFSM(  );
    }
   
        #endif
   
Kevin_G 回答时间:2018-12-12 12:57:15
TDR一旦为空,TXE就置位;因此当你打开UART发送空中断使能时,由于还没有往TDR填充数据,TDR是空的,所以TXE会立即置位并出发UART发送空中断。
sky_han 回答时间:2018-12-12 15:39:31
Kevin201707 发表于 2018-12-12 12:57
TDR一旦为空,TXE就置位;因此当你打开UART发送空中断使能时,由于还没有往TDR填充数据,TDR是空的,所以TX ...

原来是这样的,理解了,谢谢你的解释。

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版