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

歷史上的今天

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

2018年06月08日 | STM32F746 利用HAL庫編寫串口驅動程序

發布者:皮球 來源: eefocus關鍵字:STM32F746  HAL庫  串口驅動 手機看文章 掃描二維碼
隨時隨地手機看文章

之前用hal庫的時候都是用一些簡單的,例如初始化一個IO用作LED指示,今天寫的代碼需要串口的例子,說真的看了官方的demo也沒看出啥名堂,反而覺得用hal寫串口驅動太麻煩了.

回顧下之前常見的串口寫法,發送用的是阻塞式發送,一般都是發送一些調試信息,接收肯定用的是中斷;

為了編程的方便,發送一般是跟printf綁定的,但是對于hal庫這些我們又怎么來編寫呢?

接下來我把我剛剛學習到的東西分享下,如果有錯誤請指教。

我的開發板是STM32F746G-DISCO,參考的是UART_TwoBoards_ComIT例子。

首先我們看看中斷發送的例子:


  1. /* Buffer used for transmission */  

  2. uint8_t aTxBuffer[] = "****UART_TwoBoards_ComIT****\r\n";  

  3.   

  4. /* Buffer used for reception */  

  5. uint8_t aRxBuffer[RXBUFFERSIZE];  

  6. if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)  

  7. {  

  8.     Error_Handler();  

  9. }  




發送就是aTxBuffer里的數據通過中斷方式發送出去,因此這條語句是非阻塞式的,當發送完成后會回調

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *UartHandle);


接下來我們把改成使用printf的來發送;

① 在main.c里添加


  1. #include       

  2. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) //MDK  

  3. /** 

  4.   * @brief  Retargets the C library printf function to the USART. 

  5.   * @param  None 

  6.   * @retval None 

  7.   */  

  8. PUTCHAR_PROTOTYPE  

  9. {  

  10.    /* Loop until the end of transmission */  

  11.     while(__HAL_UART_GET_FLAG(&UartHandle, UART_FLAG_TC) == RESET);  

  12.       

  13.     /* Place your implementation of fputc here */  

  14.   /* e.g. write a character to the USART */  

  15.     UartHandle.Instance->TDR = (uint8_t) ch;  

  16.     

  17.   return ch;  

  18. }  


然后在串口初始化完畢后就可以調用printf語句試試了

printf("my printf test,compile time:%s %s\r\n",__DATE__,__TIME__);


本人特別喜歡用printf來調試,推薦使用115200波特率


再說說接中斷框架,先看源碼:

  1. int main()  

  2. {  

  3.   

  4.     //串口初始化  

  5.       

  6.     if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)  

  7.     {  

  8.         Error_Handler();  

  9.     }  

  10.   

  11.     while(1) //單片機的大循環  

  12.     {  

  13.       if(UartReady == SET)  

  14.         {         

  15.             UartReady =RESET;  

  16.             //添加你的處理代碼...  

  17.         HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE);//再次打開中斷接收代碼  

  18.         }  

  19.         //其他代碼...  

  20.     }  

  21.   

  22. }  

  23.   

  24. /** 

  25.       * @brief  Rx Transfer completed callback 

  26.       * @param  UartHandle: UART handle 

  27.       * @note   This example shows a simple way to report end of DMA Rx transfer, and  

  28.       *         you can add your own implementation. 

  29.       * @retval None 

  30.       */  

  31. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)  

  32. {  

  33.     /* Set transmission flag: transfer complete */  

  34.     UartReady = SET;  

  35.   

  36.     printf("HAL_UART_RxCpltCallback\r\n");  

  37. }  


HAL庫的中斷接收效率很低,而且還很死板,必須接收指定字節才能回調接收完成函數,那能不能改成超時后再回調接收完成函數呢?當然是可以的,并且我已經改出來了,思路簡單提下,在鉤子函數里加個軟件定時器,從接收到第一個字符開始倒計時,超過一定時間就調用接收回調函數,這里有個注意地方就是接收的時候接收指針千萬不要溢出了!!!


關鍵字:STM32F746  HAL庫  串口驅動 引用地址:STM32F746 利用HAL庫編寫串口驅動程序

上一篇:STM32F4的HAL庫開啟串口空閑中斷
下一篇:stm32f7 HAL庫 串口重定向 使用printf

推薦閱讀

本報記者 周慧 實習生 張建林 北京報道 高考結束后,下一道考題就是該如何選擇專業。 2018年最新公布的年度專業備案和審批結果顯示,大數據和人工智能成為增長最多的熱門專業,集成電路產業相關的專業也稍有增加。 中興事件以后,加快發展集成電路產業成為舉國共識。工信部發布的白皮書提到,目前需要70萬人投入到該產業中來,人才不...
據外媒報道,哈曼發布了新的雙模式(Dual-Mode)V2X系統,旨在提高汽車安全性。其靈活的遠程信息系統具有軟件和硬件功能,并可接入DSRC(專用短程通信)和蜂窩(5G)網絡車到一切(C-V2X)網絡,消除許多安全系統設置的猜測。V2X通信是指聯網車輛與其周圍環境之間的數據兼容傳輸,包括車輛與道路上的其他車輛、基礎設施以及行人之間的數據傳輸。目前,有兩...
翻譯自——allaboutcircuits 部分或有條件的自動駕駛汽車會留下關鍵的盲點。MEMS 6DoF慣性傳感器加上GNSS、攝像機、雷達和激光雷達的組合可能是更好的選擇。 為了提高汽車設計的安全性,村田(Murata)近期發布了其最新6軸一體封裝、3D MEMS慣性力傳感器“SCHA600系列”,慣性傳感器將其數據與GNSS和許多感知傳感器(從攝像機到雷達和激光雷達)融合在一起,...
據科創板日報,寧波飛芯電子科技有限公司(以下簡稱“飛芯電子”)董事長雷述宇表示,預估到2023年,飛芯電子的近距離、遠距離芯片產品會達到一定規模的量產。據其介紹,目前,飛芯電子正通過Tier2、Tier1跟相關車企進行接觸,公司的固態激光雷達芯片產品也在被試用,部分車企也有明確的需求。飛芯電子官方消息顯示,飛芯電子于2016年10月在西安成立,是一...

史海拾趣

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

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

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

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 玉山县| 杭锦后旗| 金乡县| 富宁县| 万州区| 张北县| 合水县| 全州县| 彝良县| 南京市| 鄄城县| 武城县| 双流县| 城固县| 宿松县| 宁波市| 沁水县| 保德县| 鄂伦春自治旗| 瓮安县| 中卫市| 元氏县| 岢岚县| 宣武区| 建平县| 土默特右旗| 金山区| 平罗县| 万山特区| 忻城县| 湘乡市| 即墨市| 柘荣县| 天长市| 育儿| 纳雍县| 五华县| 诏安县| 静乐县| 白朗县| 临湘市|