摘要:緊接著上一篇博文。。。編寫串口中斷函數當中斷發生的時候,程序就會執行中斷服務函數,我們在中斷服務函數中編寫相應的邏輯代碼就可以了。將以下代碼編寫在中串口輸出重定義到注意頭文件需要包含標準庫,也就是。
緊接著上一篇博文。。。
當中斷發生的時候,程序就會執行中斷服務函數,我們在中斷服務函數中編寫相應的邏輯代碼就可以了。
這里需要介紹幾個串口發送接收的函數
HAL_UART_Transmit();//串口發送數據,使用超時管理機制HAL_UART_Receive();//串口接收數據,使用超市管理機制HAL_UART_Transmit_IT();//串口中斷模式發送 HAL_UART_Receive_IT();//串口中斷模式接收HAL_UART_Transmit_DMA();//串口DMA模式發送HAL_UART_Transmit_DMA();//串口DMA模式接收
接下來講解幾個
串口發送數據
HAL_UART_Transmit(UART_HandleTypdef *huart,uint8_t *pData,uint16_t Size,uint32_t Timeout);/** 功能:串口發送指定長度的數據,如果超時沒有發生完成,則不在發送,并返回超時標志 參數: UART_HandleTypdef *huart :串口別名 UART_HandleTypeDef huart1; 別名就是huart1 *pData:需要發送的數據 Size:發送的字節數 Timeout:最大發送時間,發送時間超出的話停止發送**/
串口中斷接收數據
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)/** 功能:串口中斷接收,以中斷方式接收指定長度數據,大致過程就是設置數據存放位置,接收數據長度,然后使能串口中斷,接收到數據時,會觸發串口中斷 在然后,串口中斷函數處理,知道接收到指定長度數據,,而后關閉中斷,進入中斷接收回調函數,不在觸發接收中斷,所以說是只會觸發一次中斷。 參數:UART_HandleTypeDef *huart 和發送函數一樣的意思,串口的別名 *pData:接收到的數據存放的地址 Size:接收的字節數**/
在HAL庫生成的代碼文件中,stm32l0xx_it.c文件里面存放的就是各個中斷函數,只需找到對應的串口中斷,外部中斷或者定時器中斷,右擊到函數定義,就能在中斷函數定義里面找到中斷回調函數。發送串口中斷回調一般是*HAL_UART_TxCpltCallback(UART_HandleTypeDef huart);
HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
接收串口中斷回調一般是*HAL_UART_RxCpltCallback(UART_HandleTypeDef huart);
HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
只需要在你需要添加的地方重寫一下這個函數就可以了,要注意包含頭文件。下面是我的一個串口接收中斷回調,僅供參考
oid HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){ if(Uart1_Rx_Cnt >= 255) //溢出判斷 { Uart1_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); HAL_UART_Transmit(&huart1, (uint8_t *)"數據溢出", 10,0xFFFF); } else { RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer; //接收數據轉存 if((RxBuffer[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart1_Rx_Cnt-2] == 0x0D)) //判斷結束位 { HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //將收到的信息發送出去 while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//檢測UART發送結束 Uart1_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空數組 } } HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1); //再開啟接收中斷}
? 每次通過串口發送數據的時候,都去調用HAL_UART_Transmit函數,會感覺到些許麻煩,每次都需要配置四個參數,與我們初學C語言時的printf函數對比起來就方便性就差太多了,所以我一般都是將HAL_UART_Transmit函數重定義到printf,就使用printf就可以直接發送了。
? 將以下代碼編寫在uart.c中
//串口輸出重定義到printfint fputc(int ch, FILE *C){ HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff); return ch;}
**注意:**頭文件需要包含標準庫,也就是stdio.h。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/119145.html
摘要:異步通信與同步通信異步通信異步通信是指通信的發送與接收設備使用各自的時鐘控制數據的發送和接收過程。同步通信同步通信時要建立發送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。配置串口設置為異步通信基礎參數波特率為。 ...
摘要:使用庫讀寫環境光照度傳感器本文將教大家如何快速使用庫讀取光照度數據。五實驗樣機測試展示通過之前配置好的面板,通過涂鴉智能進行配網實時采集光照度傳感器的數據。 使用STM32 HAL庫讀寫環境光照度傳感器(BH1750) 本文將教大家如何快速使用STM32HAL庫讀取光照度數據。 實現功能:通...
摘要:串口波特率設置。串口的狀態可以通過狀態寄存器讀取。關閉接收完成中斷使能中斷通道搶占優先級,子優先級第五編寫中斷服務函數第六串口數據接收和發送發送與接收是通過數據寄存器來實現。 ? ? ? ?串口基本配置的寄存器,配置過程總結為: 1、串口時鐘使能。這里的串口1設置是APB2ENR寄存器的第4...
摘要:總線掛載的外設有等。外設地址映射片上外設區分為三條總線,根據外設速度的不同,不同總線掛載著不同的外設,掛載低速外設,和掛載高速外設。 第二章 STM32資源介紹 2...
摘要:灰度傳感器利用不同顏色的檢測面對光的反射程度不同的原理進行顏色深淺檢測。這就是我們用的數字量灰度傳感器。數字量的灰度傳感器如果加入的是單片機處理數據,那么可以把得到的原始數據加入濾波算法數據混合算法得到一個波動小適應環境強的數字傳感器。 文章目錄 引言 1.尋跡傳感器工作原理介紹 2.使用方...
閱讀 2513·2023-04-25 22:09
閱讀 1024·2021-11-17 17:01
閱讀 1566·2021-09-04 16:45
閱讀 2622·2021-08-03 14:02
閱讀 820·2019-08-29 17:11
閱讀 3258·2019-08-29 12:23
閱讀 1092·2019-08-29 11:10
閱讀 3282·2019-08-26 13:48