stm32库函数谁能分析下语句?

2019-08-18 19:06发布

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)

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
12778298
2019-08-18 21:10
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;
}
和这个功能一样吧,这个就好理解了,直接把 USARTx->SR 赋值一下。
如果是USART_FLAG_RXEN则值为0x0020
那么直接USARTx->SR=~0x0020,不是把SR的其他位全部置1了?
不应该只动其中的一个位吗

一周热门 更多>