娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月08日(星期日)

2018年06月08日 | STM32F207Cube庫函數USART中斷接收

發布者:玄幻劍客 來源: eefocus關鍵字:STM32F207Cube  庫函數  USART  中斷接收 手機看文章 掃描二維碼
隨時隨地手機看文章

USART初始化部分就不介紹了,直接看官方給的例程就能知道,現在主要將自己在學習過程中遇到的問題以及解決方法記錄一下。

首先,如果使用了串口接收中斷,就需要在初始化中打開中斷以及設定中斷優先級等常規操作。 
HAL_UART_Init(&UartHandle) -> HAL_UART_MspInit(huart)-> 
/* Set Interrupt Group Priority */ 
HAL_NVIC_SetPriority(USARTx_IRQn, 0, 1);

/* Enable the TIMx global Interrupt */ 
HAL_NVIC_EnableIRQ(USARTx_IRQn); 
然后需要調用串口接收終端初始化函數: 
/** 
* @brief Receives an amount of data in non blocking mode 
* @param huart: UART handle 
* @param pData: Pointer to data buffer 
* @param Size: Amount of data to be received 
* @retval HAL status 
*/ 
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

各個參數都有英文解釋。 
根據網上資料顯示,這個函數只能對串口中斷接收進行一次接收,而且接收的字節大小是固定的uint16_t Size,但是在實際使用中,不可能完全滿足每次接收到的字節數都是一樣的,而且是確定的。所以大家采用的方法都是令uint16_t Size = 1;這樣的話,每接收到一個字節就中斷一次。

那么中斷處理函數處理的規則應該是 
1、關閉此接收中斷 
2、將接收到的數據轉移至緩存器 
3、再次打開中斷

根據Cube庫函數給的函數以及示例,中斷處理函數是: 
void USARTx_IRQHandler(void) 

HAL_UART_IRQHandler(&UartHandle); 

其中void USARTx_IRQHandler(void)對應的是不同的中斷處理函數,但是終端中調用的都是HAL_UART_IRQHandler(&UartHandle); 因為HAL_UART_IRQHandler(&UartHandle);函數的參數不同,所以不會產生異常。

大家仔細看HAL_UART_IRQHandler(&UartHandle)這個函數,應該能發現兩個問題: 
1、用戶自己的中斷處理函數在哪里不會影響庫函數的完整性 
2、中斷如何再次打開 
自己是新手,最初急于求成,沒有認真學習函數中每一步,導致自己一直在糾結第一個問題:用戶中斷處理函數放在什么地方不影響庫函數的完整性,后來詳細閱讀了源代碼,發現庫函數提供了一個可供用戶重新定義的弱定義函數__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
可以供用戶重新定義函數內容,用戶直接將自己的中斷緩存數據部分放在此函數中,用戶只需要在stm32f2xx_hal_msp_.c中重新定義此函數即可。 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 

UART1RxBuff[UART1RxBuffCount++] = aRxBuffer; 

同理,用戶可以在 
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 
中再次調用 
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 
這樣的話,就可以實現連續中斷接收USART數據。

而且當需要多個串口中斷接收的時候,上述中斷處理函數如何進行中斷緩存數據,如何區別時哪一個串口發送過來的數據。這里可以利用中斷初始化中的UartHandle.Instance 這個成員變量,加上判斷就能實現串口區別,最后產生的HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)函數應該如下: 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) 

if(huart->Instance == USART1) 

UART1RxBuff[UART1RxBuffCount++] = aRxBuffer; 

HAL_UART_Receive_IT(huart, (uint8_t *)&aRxBuffer, 1) ; 
}

資料參考了:http://www.stm32cube.com/question/115 
謝謝admin的解決,謝謝每一個愿意為想我這樣新手解決問題的人,謝謝每一個愿意幫助別人的人。 
所以這里做一個記錄,以幫助那些可能遇到和我一樣問題的人。


關鍵字:STM32F207Cube  庫函數  USART  中斷接收 引用地址:STM32F207Cube庫函數USART中斷接收

上一篇:stm32f7 HAL庫 串口重定向 使用printf
下一篇:STM32 不斷進入串口中斷問題 解決方法

推薦閱讀

1、 使用CUBEMX 配置自動生成代碼:①添加串口的DMA 通道②使用串口全局中斷:其他的配置就不詳細說了。生成代碼后, 打開工程在串口初始化函數中添加代碼:/* USART1 init function */void MX_USART1_UART_Init(void){ huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; h...
當一個孩子跑到馬路上時,人類司機平均需要1.6秒踩下剎車踏板。配備雷達或者激光雷達傳感器和攝像系統的自動駕駛汽車,其反應時間縮短到0.5秒。但是如果汽車以每小時50公里的速度行駛,踩下剎車前汽車將繼續行駛7米。據外媒報道,弗勞恩霍夫可靠性和微集成研究所IZM(Fraunhofer Institute for Reliability and Microintegration IZM)與來汽車行業...
隨著車路協同系統技術的研究與發展,感知設備的可靠性、穩定性、高性價比、可大規模部署等要求被提出來。而毫米波雷達正是滿足這一要求的器件。介紹了一種基于智能網聯平臺的車路協同的基本組成與架構,闡述其在交通系統中發揮的作用。 重點討論了毫米波雷達感知技術的原理與功能,研究以毫米波雷達為主要感知設備搭建車路協同系統的可行性,研究毫米波雷...
在碳達峰、碳中和目標下,“十四五”期間我國電力系統將向高比例新能源接入、高比例電力電子裝備接入,以及骨干電網與區域電網、局域網、微網協調發展的可持續綜合能源電力發展模式轉型。這意味著電力系統的核心——電網不僅要有“量”的增加,還要有“質”的變革。為此,作為關系國家能源安全和國民經濟命脈的國有重點骨干企業,南方電網公司加快應用大...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 开封县| 潞城市| 屯昌县| 淮阳县| 涿州市| 洛浦县| 荥阳市| 贵港市| 海淀区| 汾阳市| 突泉县| 闸北区| 平和县| 漳州市| 五寨县| 洮南市| 开原市| 土默特右旗| 丁青县| 唐河县| 景德镇市| 长白| 军事| 安顺市| 平果县| 衢州市| 根河市| 长白| 沙洋县| 宣城市| 阳城县| 张掖市| 阳山县| 浙江省| 都安| 长宁县| 瑞昌市| 鹤岗市| 盐池县| 惠来县| 岳普湖县|