#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)
可見,在stm32f10x_usart.h中宏定義的以上幾個宏,很沒有規(guī)律,咋一看還真不知道為什么會這么定義,其實通過代碼就很容易明白:
D7~D5:代表中斷標志位對應(yīng)的中斷使能位在 CR1、CR2還是CR3寄存器中
D4~D0:代表中斷標志位對應(yīng)的中斷使能位在CRx寄存器的哪一位
D15~D8:代表中斷標志位在SR寄存器中的哪一位
上面我們僅僅是給出了這個結(jié)論,其實僅僅是看上面的幾行宏定義是看不出來各位代表什么意思的,只有從代碼中推理出來,下面給出stm32f10x_usart.c中USART_GetITStatus函數(shù)的實現(xiàn)就可以推理出上面為什么將上面的那幾個宏定義成那種形式了!
/**
* @brief Checks whether the specified USART interrupt has occurred or not.
* @param USARTx: Select the USART or the UART peripheral.
* This parameter can be one of the following values:
* USART1, USART2, USART3, UART4 or UART5.
* @param USART_IT: specifies the USART interrupt source to check.
* This parameter can be one of the following values:
* @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
* @arg USART_IT_LBD: LIN Break detection interrupt
* @arg USART_IT_TXE: Tansmit Data Register empty interrupt
* @arg USART_IT_TC: Transmission complete interrupt
* @arg USART_IT_RXNE: Receive Data register not empty interrupt
* @arg USART_IT_IDLE: Idle line detection interrupt
* @arg USART_IT_ORE: OverRun Error interrupt
* @arg USART_IT_NE: Noise Error interrupt
* @arg USART_IT_FE: Framing Error interrupt
* @arg USART_IT_PE: Parity Error interrupt
* @retval The new state of USART_IT (SET or RESET).
*/
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
{
uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;
ITStatus bitstatus = RESET;
/* Check the parameters */
assert_param(IS_USART_ALL_PERIPH(USARTx));
assert_param(IS_USART_GET_IT(USART_IT));
/* The CTS interrupt is not available for UART4 and UART5 */
if (USART_IT == USART_IT_CTS)
{
assert_param(IS_USART_123_PERIPH(USARTx));
}
/* Get the USART register index */
usartreg = (((uint8_t)USART_IT) >> 0x05); //由此可見D7~D5:代表中斷標志位對應(yīng)的中斷使能位在 CR1、CR2還是CR3寄存器中
/* Get the interrupt position */
itmask = USART_IT & IT_Mask;
itmask = (uint32_t)0x01 << itmask; //由此可見D4~D0:代表中斷標志位對應(yīng)的中斷使能位在CRx寄存器的哪一位
if (usartreg == 0x01) /* The IT is in CR1 register */
{
itmask &= USARTx->CR1;
}
else if (usartreg == 0x02) /* The IT is in CR2 register */
{
itmask &= USARTx->CR2;
}
else /* The IT is in CR3 register */
{
itmask &= USARTx->CR3;
}
bitpos = USART_IT >> 0x08; //由此可見D15~D8:代表中斷標志位在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;
}
上一篇:STM32中發(fā)送中斷標志位
下一篇:stm32中關(guān)于讀取狀態(tài)標志位函數(shù)的自我理解
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 動力電池“三國殺”:中企提前鎖定勝局,日韓廠商集體失守
- 研究人員開發(fā)出人工智能雷達技術(shù) 可用于高分辨率3D城市制圖
- 上半年動力電池TOP15:寧德時代和比亞迪裝車近200GWh 兩家公司新上榜
- 半年砸下數(shù)千億元!“并購”浪潮下,汽車芯片大戰(zhàn)再起風云
- 奇瑞人形機器人9月開售并將面向個人用戶,機器人時代該來了嗎?
- 華為李文廣:華為智能駕駛規(guī)劃曝光,加速追趕特斯拉
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-下
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-中
- 功能迭代和功能安全的矛盾及車端應(yīng)用層-上
- 車云一體其他層面的架構(gòu)設(shè)計借鑒-下
- 4月26日上午10:00邀您觀看 基于TI Sitara™AM5708的工業(yè)派開源平臺介紹 有獎直播
- 免費試用|是德科技加快信號完整性和電源完整性測試
- 有獎直播:ADI 慣性 MEMS 傳感器的應(yīng)用價值與選型
- 邀您注冊 VICOR 電池化成與測試迷你站
- 了解 MPS 隔離解決方案,答題贏【華為藍牙無線耳機、小米氮化鎵充電器】!
- 【贈書100%有禮】一本書教你如何開發(fā)測試系統(tǒng),深入了解數(shù)據(jù)采集系統(tǒng)
- 點評《與Atmel SAM D21/R21的相遇、相識、相知(上)》,贏溫暖新春禮
- 免費申請TI 樣片,曬單贏好禮!
- 看Atmel SAM D MCUs專題視頻,答題贏好禮
- 【ARM】ADC·FS2410數(shù)模轉(zhuǎn)換
- 【ARM】gpio·arm體系結(jié)構(gòu)之gpio
- 得到一個field在結(jié)構(gòu)體中的偏移量
- 基于STM32的LED點陣屏的設(shè)計與實現(xiàn)
- 2021 EdgeX中國挑戰(zhàn)賽盛大開幕,英特爾賦能開發(fā)者
- GIS第4季營收創(chuàng)單季新高
- 今年10.5代面板廠火力大開 啟動全球電視新競局
- 偉世通攜創(chuàng)新自動駕駛以及全數(shù)字化座艙驚艷亮相CES
- Gartner重點介紹AI驅(qū)動型智能手機的10種用途
- 小米走出低谷 全球低增長時期出貨量反飆升91%