USART_ClearITPendingBit(USART1,USART_IT_RXNE);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint16_t bitpos = 0x00, itmask = 0x00;
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
bitpos = USART_IT >> 0x08;
itmask = ((uint16_t)0x01 << (uint16_t)bitpos);
USARTx->SR = (uint16_t)~itmask;
}
意思应该是把RXNE位清零,具体是怎么执行的呢?
#define USART1 ((USART_TypeDef *) USART1_BASE)
#define USART_IT_RXNE ((uint16_t)0x0525)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
{
/* 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;
}
和这个功能一样吧,这个就好理解了,直接把 USARTx->SR 赋值一下。
如果是USART_FLAG_RXEN则值为0x0020
那么直接USARTx->SR=~0x0020,不是把SR的其他位全部置1了?
不应该只动其中的一个位吗
一周热门 更多>