STM32官方3.5的库里面的宏USART_IT_TC是不是不对啊,前辈帮忙...

2020-01-11 18:08发布

本帖最后由 shuen729 于 2018-5-18 13:44 编辑

已经解决了,我自己用错宏了
=========================分隔符======================================
起因是这样的,我用USART3的时候,初始化走到打开TC中断之后代码就不往下走了,一直进TC中断。
中断处理的时候这么用的:
if(SET == USART_GetITStatus(USART3,USART_IT_TC))
                {
                USART_ClearFlag(USART3,USART_IT_TC);
                }
细看了清中断标志位的库函数代码,把入参USART_FLAG按位取反就直接赋给寄存器了,没看出什么毛病来,如下:
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
  /* The CTS flag is not available for UART4 and UART5 */
  if ((USART_FLAG & USART_FLAG_CTS) == USART_FLAG_CTS)
  {
    assert_param(IS_USART_123_PERIPH(USARTx));
  }
   
  USARTx->SR = (uint16_t)~USART_FLAG;
}
又看了手册,寄存器的说明,bit6是TC标志
Bit 6 TC: Transmission complete

再一看库里面那个宏,怎么看怎么别扭,用这个清肯定不行啊

#define USART_IT_TC                          ((uint16_t)0x0626)

然后换了个参数0x40进去,就是下面这个,好了

if(SET == USART_GetITStatus(USART3,USART_IT_TC))
                {
                USART_ClearFlag(USART3,0x40);
                }
大家有遇到吗?库确实有问题,还是我用的不对?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
love_ourdev
1楼-- · 2020-01-11 19:00
楼主,USART_IT_TC是传递给USART_ClearITPendingBit()函数的;而USART_FLAG_TC才是传递给USART_ClearFlag()的,
你错搭了,真不仔细.
12tangyang12
2楼-- · 2020-01-11 21:08
官方库怎么会错呢
lisingch
3楼-- · 2020-01-12 02:11
这种概率很低。
shuen729
4楼-- · 2020-01-12 05:09
 精彩回答 2  元偷偷看……

一周热门 更多>