因HAL庫運行效率慢,所以串口部分使用LL庫,LL庫更底層
工程設置
1、開啟串口中斷

image
2、串口使用LL庫

image
1、設置中斷回調
void LLx_UART2_RxCpltCallback(unsigned char data){
ReceiveData(&wirless_dev, data);}
2、設置串口中斷
void USART2_IRQHandler(void){
/* USER CODE BEGIN USART2_IRQn 0 */
extern void LLx_UART2_RxCpltCallback();
volatile unsigned char data;
data = USART2->DR;
LLx_UART2_RxCpltCallback(data);
LL_USART_ClearFlag_RXNE(USART2);
/* USER CODE END USART2_IRQn 0 */
/* USER CODE BEGIN USART2_IRQn 1 */
/* USER CODE END USART2_IRQn 1 */}
3、設置串口發送函數
static void uart2_DataOut(uint8_t * data, uint16_t datasize){
for (uint8_t a = 0; a < datasize; a++)
{
while(!LL_USART_IsActiveFlag_TXE(USART2)){};
LL_USART_TransmitData8(USART2,*(data + a));
}}
4、打開串口中斷
LL_USART_ClearFlag_RXNE(USART2);
LL_USART_EnableIT_RXNE(USART2);
注意:進中斷一定要清中斷!!!!
關鍵字:STM32 LL庫 串口中斷
引用地址:
STM32 LL庫串口中斷
推薦閱讀最新更新時間:2025-05-22 11:06
STM32串口用中斷還是用輪詢
1.從輪詢到中斷 很多同學都不喜歡用中斷,而偏愛用輪詢的操作方式。 這是不是和我們的天性有關呢?每個人都喜歡一切盡在掌握中,肯定都不喜歡被打斷。我們常常都有這樣的經驗:正在跟別人說一件事,然后突然有個電話打進來,Call打完后突然記不起來剛才講到哪了!這種糟糕的體驗對我們影響是如此深刻,以至于我們認定機器可能也是這樣吧,頻繁的中斷會不會把事情搞亂呢?好在機器雖然大部分時間都比人笨一些,但在處理這種問題上卻能做到一絲不茍。機器在中斷來的時候總會老老實實地先把當前正在做的記錄下來,然后轉去處理中斷事件,中斷處理完后分毫不差地恢復原來的工作。 仔細想一想,我們是不是也可以在接電話前先用個小本兒記錄一下正在講的事情呢?我們為什么沒有這么做
[單片機]
STM32 HAL庫 串口DMA發送完成中斷
近期使用STM32驅動MAX3485進行485通信,發現STM32F103C8并不自帶硬件485首發功能,需要軟件上控制IO高低來驅動MAX3485進行485接收、485發送。 根據MAX3485手冊可得,進行485發送時給相應引腳高電平。其余時間為低電平進行485接收。因此需要找到串口DMA發送完成的回調函數,在發送完成后將引腳拉低。 在stm32f1xx_hal_uart.c中 /** @defgroup UART_Exported_Functions_Group2 IO operation functions * @brief UART Transmit and Receive functions * @verb
[單片機]
一起學mini2440裸機開發(十二)--mini2440的串口中斷實驗
本實驗實現的功能是:利用串口中斷功能,通過串口調試工具接收到字符后再顯示。 下圖為我的工程文檔 main.c文件 #include isrservice.h #include uart.h #include led.h #include interrupt.h int main() { Uart0_Init(115200); //初始化并設置波特率為115 200 Uart0_Interrupt_Init(); //Uart0中斷初始化 Led_Init(); //Led初始化 while(1) //循環,等到中斷發生 { ; }
[單片機]
STM8S103xx串口一直中斷
前段時間做了一個項目,有部分功能是接收串口命令,根據命令保存一些系統數據(用STM8S內自帶的EEPROM)。項目完成之初用串口調試工具發單條命令可以正常接收保存,但用一個上位機軟件連續發命令(約20ms)時單片機死機了。IDE用的是IAR,雖說可以直接在線調試,但這個IDE不能在運行時設置斷點,所以找了好久一直沒有查到程序停在了哪里,直接代碼單步執行跑得有點奇怪,但進出中斷也正常。后來改用匯編界面單步,發現程序都是在進棧出棧這些指令才懷疑是不是有一直進出中斷,而進出中斷肯定是中斷標志置位了。找出STM8S規定書仔細一查才發現STM8S的UART還有個“過載錯誤”,要命的是此“過載錯誤”是產生中斷的,以前用的51沒發現有過載錯誤這
[單片機]
c51:串口中斷方式接收、方式字符串
/* 程序設計功能: 1.f=12MHZ,baud=1200 2.串口中斷方式:發送字符串存放tran_buf 中,接收字符串存放rec_buf 中。 3.函數首先發送字符串 abc . 4.接收到的字符串存放rec_buf 中,接收字符串完成后,再發送出去。 */ #include reg52.h #include string.h #define uchar unsigned char //發送字符串緩存 uchar tran_buf ; //接收字符串緩存 uchar rec_buf ; uchar tnum=0; uchar rnum=0; //串口初始化 void
[單片機]
簡單的51與pc的串口通訊(用串口中斷實現
#include reg52.h unsigned char flag=0,a; void delay() { unsigned char i,j; for(i=0;i 100;i++) for(j=0;j 100;j++); } void main() { TMOD=0x20;//設置定時器1為工作方式2 TH1=0xfd; TL1=0xfd; TR1=1; SCON=0x52; PCON&=0x7f; TI=0; // EA=1; // ES=1; while(1) { if(RI==1) { RI=0; // P0=SBUF; a=SBUF; flag=1;
[單片機]
stm32中主頻的超頻實驗
在正常的32開發板中,一般主頻都是72MHz,這是通過代碼配置好的,下面我們就來學習如何把開發板的主頻配置為72MHz,以及超過72Mhz。 目標:通過本次實驗了解如何通過代碼配置stm32開發板的時鐘主頻。 一、找到配置主頻為72MHz的代碼: 1先打開任意一個工程,然后在該工程的CORE文件夾下下找到.s文件,也就是啟動文件。2在啟動文件中找到SystemInit();這個函數,進入這個函數,然后再這個函數中找到SetSysClock();這個函數,并進入。在SetSysClock();函數中找到SetSysClockTo72();這個函數,并進入。然后就可以看到在SetSysClockTo72()函數下的直接操作
[單片機]
STM32入門之文件結構
本人在學習STM32過程中,主要使用的是B站洋桃電子的課程(之前使用過正點原子的視頻,感覺不適合本人這種小白),因而其中許多代碼借鑒(抄)了其課程,故在此說明。 文件樹 stm32文件樹 可以看到,該文件分為六大部分,不同人對其起名可能有出入,或者文件結構有略微區別。但其關鍵的幾個部分及開發方式是基本相同的。 STARTUP 其中STARTUP是STM32的啟動代碼,用匯編語言編寫。 我們正常在操作一款單片機的時候,都是從main函數開始進行編程的,但是單片機上電是從main函數開始執行的嗎?答案當然是否定的,在main函數之前單片機最先執行的是硬件設置SP、PC然后是“啟動文件”,一般主要是項目文件里面的startu
[單片機]