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

STM32串口中断,发送数据

[复制链接]
sky_han 发布时间:2018-12-11 18:03
现在已经实现了串口发送数据和接收数据。
0 Z* p- K4 o& _. M9 l" `
% f9 S" ~- |. S7 l5 X+ L+ E! @: s我想请教的是为什么串口中断一打开,我就可以在中断服务程序里,判断到TXE标志进行写数据。
7 g! t: [3 o8 x& b4 F
, ]8 R1 C7 g: K% c这个TXE标志不应该是硬的数据从TDR到移位寄存器里的置的。: U, ?7 N) X+ s; c+ J: z
赞 收藏 评论4 发布时间:2018-12-11 18:03

举报

4个回答
chenyang601 回答时间:2018-12-12 10:07:37
串口中断,最好在要发送的数据时,开启发送中断使能。不然,只开接收中断使能就好。这样就没有那么多问题。
sky_han 回答时间:2018-12-12 10:38:14
我就是发送的时候开的中断,我用的没有问题,我就是对技术细节有点疑问.
, D& P: `9 U$ u1 e2 ~就是我打开中断后,第一次进中断后,判断标志,发送数据,我还没有发第一次数据,这个时候TXE标志怎么能够查询到?
4 P6 c8 _$ j# S8 G; V2 Y$ }6 r( U; M6 I' D& G3 d: W
void USART1_IRQHandler(void)  `2 h1 l+ L9 A  h6 X' J
{
2 r; ]' m! F0 p/ o8 u   
# O* H$ w' o+ q* R# x. h    MCU_INT32MU tmp_flag = 0, tmp_it_source = 0;% X8 d: Q$ h2 r9 A5 Q3 J6 }- [
# L8 C+ B7 l  c, M* \9 Y" `
        #ifndef VC_PRJ
8 ^; E5 h3 t$ K4 H4 ^    $ O4 A7 R8 v; W7 J1 ]
    tmp_flag = __HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_RXNE);
. m+ g7 X  j1 _' o( U    tmp_it_source = __HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_RXNE);
: T6 s# ?# @' e  z2 L    if((tmp_flag != RESET) && (tmp_it_source != RESET))
5 q  X+ m( D0 m( H    {8 Z8 ?/ _: |7 R5 f# ?
        xMBRTUReceiveFSM(  );% g) y  s9 y/ e" l  m- ~
    }
8 Q, X" e% T. c# X% f& I   
& N) W$ W" B  U- f, B    tmp_flag = __HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_TXE);+ C: E7 ]# }6 ]1 F6 p6 h/ ?
    tmp_it_source = __HAL_UART_GET_IT_SOURCE(&UartHandle, UART_IT_TXE);
+ d! r' h+ |8 g, `4 i    /* UART in mode Transmitter ------------------------------------------------*/
7 q: [. @9 ^  ~5 y    if((tmp_flag != RESET) && (tmp_it_source != RESET))
) ?  b9 x& x, {5 k    {
( K; L. _. f: g% O6 l1 i7 H        xMBRTUTransmitFSM(  );
8 l2 l$ j8 u5 I8 N( [& E    }
; X8 ~4 `) z% d    5 U* p# n8 K5 t( b1 b
        #endif
1 H& l/ s) f' O* j! x; N   
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
. h4 B8 @0 P  u. o0 q& D6 ]TDR一旦为空,TXE就置位;因此当你打开UART发送空中断使能时,由于还没有往TDR填充数据,TDR是空的,所以TX ...

# y3 s1 L8 c0 k0 b  G原来是这样的,理解了,谢谢你的解释。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版