STM32 USATR固件庫(kù)中定義的幾個(gè)中斷標(biāo)志的含義
掃描二維碼
隨時(shí)隨地手機(jī)看文章
在stm32f10x_usart.h中有以下宏定義:
#define USART_IT_PE ((uint16_t)0x0028)
#define USART_IT_TXE ((uint16_t)0x0727)
#define USART_IT_TC ((uint16_t)0x0626)
#define USART_IT_RXNE ((uint16_t)0x0525)
#define USART_IT_IDLE ((uint16_t)0x0424)
#define USART_IT_LBD ((uint16_t)0x0846)
#define USART_IT_CTS ((uint16_t)0x096A)
#define USART_IT_ERR ((uint16_t)0x0060)
#define USART_IT_ORE ((uint16_t)0x0360)
#define USART_IT_NE ((uint16_t)0x0260)
#define USART_IT_FE ((uint16_t)0x0160)
它的含義如下(Dx---表示二進(jìn)制中的第x位):
D0~D4:代表中斷標(biāo)志位對(duì)應(yīng)的中斷使能位在CRx寄存器的哪一位
D5~D7:代表中斷標(biāo)志位對(duì)應(yīng)的中斷使能位在 CR1、CR2還是CR3寄存器中
D8~D15:代表中斷標(biāo)志位在SR寄存器中的哪一位
以上結(jié)論可以通過(guò)stm32f10x_usart.c中USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);函數(shù)的實(shí)現(xiàn)就可以推理出上面的結(jié)論!以下是其相應(yīng)的代碼。
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
ITStatus bitstatus = RESET;
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_GET_IT(USART_IT));
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
usartreg = (((uint8_t)USART_IT) >> 0x05); //D5~D7:代表中斷標(biāo)志位對(duì)應(yīng)的中斷使能位在 CR1、CR2還是CR3寄存器中
itmask = USART_IT & IT_Mask;
itmask = (uint32_t)0x01 << itmask; //D0~D4:代表中斷標(biāo)志位對(duì)應(yīng)的中斷使能位在CRx寄存器的哪一位
if (usartreg == 0x01)
{
itmask &= USARTx->CR1;
}
else if (usartreg == 0x02)
{
itmask &= USARTx->CR2;
}
else
{
itmask &= USARTx->CR3;
}
bitpos = USART_IT >> 0x08; //D8~D15:代表中斷標(biāo)志位在SR寄存器中的哪一位
bitpos = (uint32_t)0x01 << bitpos;
bitpos &= USARTx->SR;
if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))
{
bitstatus = SET;
}
else
{
bitstatus = RESET;
}
return bitstatus;
}