stm32 USART串列埠通訊總結

2021-09-14 02:48:25 字數 2912 閱讀 3527

usart.h

#ifndef __usart_h

#define __usart_h

#include "stdio.h"

#include "sys.h"

#define usart_rec_len 200 //定義最大接收位元組數 200

#define en_usart1_rx 1 //使能(1)/禁止(0)串列埠1接收

extern u8 usart_rx_buf[usart_rec_len]; //接收緩衝,最大usart_rec_len個位元組.末位元組為換行符

extern u16 usart_rx_sta; //接收狀態標記

void uart_init(u32 bound); //usart初始化

#endif

usart.c
#include "sys.h"

#include "usart.h"

#if 1

#pragma import(__use_no_semihosting)

//標準庫需要的支援函式

struct __file

; file __stdout;

//定義_sys_exit()以避免使用半主機模式

_sys_exit(int x)

//重定義fputc函式

int fputc(int ch, file *f)

#endif

#if en_usart1_rx //如果使能了接收

//串列埠1中斷服務程式

//注意,讀取usartx->sr能避免莫名其妙的錯誤

u8 usart_rx_buf[usart_rec_len]; //接收緩衝,最大usart_rec_len個位元組.

//接收狀態

//bit15, 接收完成標誌

//bit14, 接收到0x0d

//bit13~0, 接收到的有效位元組數目

u16 usart_rx_sta=0; //接收狀態標記

void uart_init(u32 bound)

void usart1_irqhandler(void) //串列埠1中斷服務程式

else //還沒收到0x0d

}}

} } #endif

這裡定義了乙個gpio_inittypedef結構體來設定gpio口初始化資料**如下:

typedef struct

gpio_inittypedef;

用來設定指定要配置的gpio。

這裡還有定義了乙個usart_inittypedef結構體來設定串列埠資訊,**如下:

typedef struct

usart_inittypedef;

這裡還定義了乙個nvic_inittypedef結構體來設定中斷優先順序,**如下:

typedef struct

nvic_inittypedef;

/*** @}

*//** @defgroup nvic_priority_table

* @else

}

main.c檔案

main.c

#include "delay.h"

#include "sys.h"

#include "usart.h"

int main(void)

; /* file is typedef』 d in stdio.h. */

file __stdout;

//定義_sys_exit()以避免使用半主機模式

_sys_exit(int x)

//重定向fputc函式

//printf的輸出,指向fputc,由fputc輸出到串列埠

//這裡使用串列埠1(usart1)輸出printf資訊

int fputc(int ch, file *f)

#endif

//end

#if en_usart1_rx //如果使能了接收

//串列埠1中斷服務程式

//注意,讀取usartx->sr能避免莫名其妙的錯誤

u8 usart_rx_buf[usart_rec_len]; //接收緩衝,最大usart_rec_len個位元組.

//接收狀態

//bit15, 接收完成標誌

//bit14, 接收到0x0d

//bit13~0, 接收到的有效位元組數目

u16 usart_rx_sta=0; //接收狀態標記

void usart1_irqhandler(void) //串列埠接收中斷函式

else //還沒收到0x0d

}}

}} #endif

//初始化io 串列埠1

//pclk2:pclk2時鐘頻率(mhz)

//bound:波特率

void uart_init(u32 pclk2,u32 bound)

main.c檔案
#include "sys.h"

#include "usart.h"

#include "delay.h"

int main(void)

usart_rx_sta=0;

} }

}

注usart暫存器tx中斷標誌位清零的方法是往dr暫存器寫入資料或者手動清零,而置位的方法是等dr裡面的資料從tx引腳上全部發出來。

STM32USART串列埠通訊

問題描述 利用usart串列埠程式,實現pc與stm32通訊,計算機傳送資料,stm32接受後,再傳送給pc端 1.gpio埠配置 根據手冊 pa.9為tx 傳送 pa.10為rx 接受 因此 pa.9為復用推挽輸出,pa.10為浮空輸入,一行 搞定 void gpio config 2.配置usa...

stm32 USART 串列埠通訊

簡單區分同步和非同步就是看通訊時需不需要對外提供時鐘輸出 usart 有專門控制傳送的傳送器 控制接收的接收器,還有喚醒單元 中斷控制等等。使用 usart 之前需要向 usart cr1 暫存器的 ue 位置 1 使能 usart,ue 位用來開啟供給給串列埠的時鐘。傳送或者接收資料字長可選 8 ...

STM32 USART通訊 筆記

新增usart通訊不良的因素 2020 5 12 stm32f1xx晶元參考手冊 stm32 reference manual rm0008 usart universal synchronous asynchronous receiver transmitter 它名為通用非同步 同步收發器 它是...