STM32學習手記3 串列埠 除錯

2021-10-11 21:24:01 字數 2243 閱讀 9119

stm32可以通過串列埠、jtag和swd口進行燒寫和除錯。

盜版jlink不能進行韌體公升級!盜版jlink不能進行韌體公升級!盜版jlink不能進行韌體公升級!

重定向輸出函式:在庫函式中有printf();函式,預設功能是在顯示器上回顯除錯資訊。該指令可以方便的輸出字串、符號和各種資料型別。printf()函式預設是呼叫int fputc(int ch, file *f)函式進行輸出的。可以通過重定義fputc()函式使輸出重定向到串列埠上。

stm32的串列埠:

stm32-m3共有4個串列埠:usart1-usart4。

初始化結構體​:

​ usart_initstructure.usart_baudrate = bound;//波特率9600;

usart_initstructure.usart_wordlength = usart_wordlength_8b;                       //資料長度8bit

usart_initstructure.usart_stopbits = usart_stopbits_1;//停止位1位

usart_initstructure.usart_parity = usart_parity_no;//無校驗位

usart_initstructure.usart_hardwareflowcontrol = usart_hardwareflowcontrol_none;//無硬體流控制

usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;             //傳送、接收模式

​控制結構體:

typedef struct

__io uint16_t sr;            //狀態暫存器

uint16_t  reserved0;

__io uint16_t dr;     //資料快取暫存器,讀、寫實際上分別是兩個暫存器

uint16_t  reserved1;

__io uint16_t brr;       //波特率設定暫存器

uint16_t  reserved2;

__io uint16_t cr1;     //控制暫存器1

uint16_t  reserved3;

__io uint16_t cr2;         //控制暫存器2

uint16_t  reserved4;

__io uint16_t cr3;//控制暫存器3

uint16_t  reserved5;

__io uint16_t gtpr;     //保護時間和預分頻暫存器

uint16_t  reserved6;

} usart_typedef;

​實際上每個變數就是乙個暫存器的。寫入、讀取sr,或者dr,實際上就是製作操作暫存器。

#define usart1              ((usart_typedef *) usart1_base)​

由此可知,實際上這個控制結構體裡的每個變數,都指向控制暫存器的實際位址。

​操作函式:

usart_init(usart_typedef* usartx, usart_inittypedef* usart_initstruct)​;//初始化函式

usart_deinit(usart_typedef* usartx);//串列埠復位

usart_senddata(usart_typedef* usartx, uint16_t data);//傳送資料

​uint16_t usart_receivedata(usart_typedef* usartx);//讀取資料

​flagstatus usart_getflagstatus(usart_typedef* usartx, uint16_t usart_flag);//讀取狀態

​usart_cmd(usart1, enable); //使能串列埠1

​usart_itconfig(usart_typedef* usartx, uint16_t usart_it,functionalstate newstate);//中斷設定函式

​itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it);//中斷狀態獲取函式

STM32串列埠除錯

改為串列埠中斷接收方式,發現也只能進入一次接收中斷函式,把開啟中斷函式放入接收中斷函式內,可以連續進入接收中斷函式了,但是資料丟失的問題仍然存在,又經過一番除錯發現將處理資料函式從接收中斷函式中取出,問題就解決了。然而採用串列埠dma方式時,將處理函式從中斷函式中取出,讀取的資料還是錯誤的。唉,現在...

STM32 串列埠通訊學習

1 初始化gpio。2 中斷和串列埠1配置。3 寫串列埠中斷服務函式。4 寫主函式。不管是初始化gpio口還是定時器,串列埠等等,都需要先進行宣告。gpio inittypedef gpio initstructure usart inittypedef usart initstructure nv...

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...