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