STM32l151低功耗晶元串列埠通訊 HAL庫

2021-07-07 06:30:19 字數 1403 閱讀 7567

參考原子的stm32f1系列的串列埠通訊實驗,移植到stm32l1系列的程式**。

1、採用串列埠中斷方式,串列埠接收到訊息產生中斷,因此需要使能rxne暫存器。hal庫函式的呼叫方式是__hal_uart_enable_it(&uarthandle1, uart_it_rxne);

uarthandle1是uart_handletypedef型別,具體參考stm32lxx_hal_uart.h檔案。

2、關於串列埠初始化,由於hal庫中的串列埠初始化函式hal_uart_init();會呼叫hal_uart_mspinit();後者是乙個關於串列埠1和串列埠2的i/o埠模式選擇及初始化的函式。

為了使程式能順利進入中斷,可在mspinit()函式或者hal_uart_init()函式中使能串列埠並在這裡設定優先順序,hal_nvic_setpriority(usart1_irqn,0,1);

hal_nvic_enableirq(usart1_irqn);

3、編寫串列埠中斷函式。採用乙個unsigned char型別陣列作為串列埠快取,乙個unsigned short int 作為串列埠接收快取區的指標。

需要注意的是發生了中斷必須要清除中斷標誌,否則程式將一直處於該中斷。但是從參考手冊可以得知,在中斷中對資料暫存器進行一次讀操作,即可清除rxne暫存器的標誌位,所以,在中斷裡讀取並且儲存dr暫存器中的內容是乙個很好的選擇。

4、部分**

1.串列埠初始化

bool initserial(uint32_t  baudrate)

__hal_uart_enable_it(&uarthandle1, uart_it_rxne);

return true;

}

2. mspinit

void hal_uart_mspinit(uart_handletypedef *huart)

3.中斷程式

void usart1_irqhandler(void)

else

}} }

}

4.主函式測試**

print("usart1_test: usart1_sta=%d\r\n",usart1_sta);

while(1)

else

}hal_delay(10);

}

串列埠間通訊方法(示例:串列埠1傳送給串列埠2)

void usart1_to_usart2(void)

usart1_sta = 0;

hal_uart_transmit(&uarthandle2,(uint8_t*)rx1_buff,len+1,20);

}}

stm32L151 系統時鐘配置

寫在前面 微控制器型號 stm32l151v8t6 硬體 8mhz有源晶振 目的 開啟外部高速晶振,配置系統時鐘 預設使用hsi 16mhz 其實時鐘的配置一點也不難,只要看懂時鐘樹就好。工程的裡面startup stm32l1xx md.s為啟動檔案,reset handler routine r...

STM32低功耗設計

具體要點為 1 所有io管腳,如果高阻狀態埠是高電平,就設成上拉輸入,如果高阻狀態是低電平,設成下拉輸入,如果高阻是中間狀態,設成模擬輸入。這個很多人都提到過,必須的。作為輸出口就免了,待機你想輸出個什麼東西,一定要輸,硬體上加上下拉就可以了 2 兩個晶振輸入腳要remap成普通io!使用內部晶振。...

STM8L之低功耗

1 stm8l有幾個模式?a.非低功耗模式1個,run mode 執行模式 b.低功耗模式 3個 wait 等待模式 active halt 活躍停機模式 halt 停機模式 2 stm8l低功耗的3個模式有什麼區別?簡單地來說,就是 a.wait 等待模式 時鐘關閉 外設可用。通過中斷 外部中斷 ...