STM32L0XX用IO口模擬串列埠UART接收

2021-10-10 17:02:39 字數 1438 閱讀 2062

說明

串列埠通訊初始化

#define su_true    1

#define su_false 0

void

softuart_init

(void

)

一開始先設定softuart()初始化,將所有標誌位都置0。先進行io口的初始化,然後對定時器進行初始化。初始化tim6基本定時器,將softuart_tim_cb()這個函式設定為tim6定時器的中斷函式。

定時器初始化

io口初始化

static

void

io_init

(void

)

初始化io口,將rx引腳設定為輸入引腳,然後設定rx中斷,為下降沿中斷,且中斷呼叫函式為rx_irqhandler函式。

下降沿中斷函式

static

void

rx_irqhandler

(void)}

#define start_rx() (hal_tim_base_start_it(&tim6_handle))

//開啟讀取定時器中斷

定時器中斷函式

void

softuart_tim_cb

(void

)stop_rx()

;//停止rxif(

++qin >= softuart_in_buf_size )

//讀取資料緩衝區為128,所以資料緩衝區一共有128位元組

flag_rx_ready = su_false;

//【開啟rx】置0

flag_rx_waiting_for_stop_bit = su_false;

//資料儲存完成,不再等待停止位

}else

rx_mask <<=1;

if(++rx_bit_cnt == rx_num_of_bits )

//如果讀取的資料達到8個}}

}}

從輸入緩衝區inbuf讀取乙個位元組資料
uint8_t

softuart_getchar

(uint8_t

*data )

return0;

}return1;

//如果qout=qin,說明此時qin正在輸入,返回1代表busy

}

io口模擬uart串列埠

STM32L0 內部EEPROM寫讀

stm32l0內部的eeprom寫操作由解鎖,寫入,加鎖過程組成,讀過程則無需解鎖。至於stm32l0內部的非易失空間區分為flash和eeprom,主要體現在用st link等工具進行整片擦除時,只擦除flash的空間,eeprom的部分不會被擦除,如同外部eeprom晶元,mpu的 公升級不影響...

建立乙個STM32F0xx工程模板

之前一直是使用stm32f103系列,直接使用正點原子的教程,並沒有關注過建立工程的問題,現在由於某些原因,需要使用stm32f072c8t6,引腳功能大致相同,但沒有現成能用的工程,所以需要手動建立乙個工程。參考部落格1 參考部落格2 推薦參考部落格2進行建立。部落格1中的第17點,需要再新增乙個...

stm32l0 rtc休眠週期自動喚醒文件整理

stm32l0 rtc 休眠週期自動喚醒 文件整理 wangxl 20190814 一 週期性自動喚醒 手冊文件說明 週期性喚醒標誌由 16 位可程式設計自動過載遞減計數器生成。喚醒定時器範圍可擴充套件至 17 位。可通過rtc cr 暫存器中的 wute 位來使能此喚醒功能。喚醒定時器的時鐘輸入可...