本帖最后由 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);
}
大家有遇到吗?库确实有问题,还是我用的不对?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>