stm32串列埠通訊

2021-10-25 12:24:11 字數 3424 閱讀 9405

通訊的分類:序列通訊,並行通訊。

序列通訊:usart,iic,spi並行:sdio,fsmc

全雙工:同時發和收。半雙工:不可以同時收發資料,可分時收發資料。半工;任何時候都只能往乙個固定的方向傳輸資料。

同步:有時鐘,效率高,資訊量大,但是通訊雙方的時鐘准許誤差較小。

位元率:每秒傳輸的二進位制位數,單位為bit/s

波特率:每秒傳輸的碼元個數

串列埠通訊協議簡介:

1,rs232標準

2,usb轉串列埠

3, 原生的串列埠到串列埠

ttl電平:一般來說從晶元**來的電平

1.初始化gpio

2.初始化usart

3.配置串列埠中斷

初始化gpio**。這裡我們使用的是串列埠1

gpio_inittypedef gpio_initstructure;

rcc_apb2periphclockcmd(rcc_apb2periph_gpioa, enable);

//usart1_tx gpioa.9

gpio_initstructure.gpio_pin = gpio_pin_9;

gpio_initstructure.gpio_speed = gpio_speed_50mhz;

gpio_initstructure.gpio_mode = gpio_mode_af_pp;

//復用推挽輸出

gpio_init

(gpioa,

&gpio_initstructure)

;//初始化gpioa.9

//usart1_rx gpioa.10初始化

gpio_initstructure.gpio_pin = gpio_pin_10;

//pa10

gpio_initstructure.gpio_mode = gpio_mode_in_floating;

//浮空輸入

gpio_init

(gpioa,

&gpio_initstructure)

;//初始化gpioa.10

初始化usert

usart_inittypedef usart_initstructure;

rcc_apb2periphclockcmd(rcc_apb2periph_usart1,enable);

//usart 初始化設定

usart_initstructure.usart_baudrate = bound;

//串列埠波特率

usart_initstructure.usart_wordlength = usart_wordlength_8b;

//字長為8位資料格式

usart_initstructure.usart_stopbits = usart_stopbits_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;

//收發模式

usart_init

(usart1,

&usart_initstructure)

;//初始化串列埠1

配置中斷

nvic_inittypedef nvic_initstructure;

//usart1 nvic 配置

nvic_initstructure.nvic_irqchannel = usart1_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority=3;

//搶占優先順序3

nvic_initstructure.nvic_irqchannelsubpriority =3;

//子優先順序3

nvic_initstructure.nvic_irqchannelcmd = enable;

//irq通道使能

nvic_init

(&nvic_initstructure)

;//根據指定的引數初始化vic暫存器

配置串列埠1完整的程式為:.

void

uart_init

(u32 bound)

上面我們列出了配置串列埠1 的初始化程式,如果想要初始化別的串列埠,那麼需要對照晶元手冊將g串列埠改為對應的gpio,並將usart1改為自己需要的,***注意stm32中usart1是掛在在apb2匯流排下,其他的usart是掛在apb1匯流排下,需要修改。***.

使用串列埠傳送資料的函式:

//傳送乙個位元組

void

usart_sendbyte

(usart_typedef* usartx, uint8_t data)

//傳送兩個位元組

void

usart_sendtwoword

(usart_typedef* usartx, uint16_t data)

//傳送陣列

void

usart_sendarray

(usart_typedef* usartx, uint8_t *array,uint8_t num)

while

(usart_getflagstatus

(usartx, usart_flag_tc)

== reset);}

//傳送字串

void

usart_sendstr

(usart_typedef* usartx,uint8_t *str)

while(*

(str+i)

!='\0');

}

在學習c語言的時候我們用到了printf函式,在keil中我們加入以下**就可以使用。

#if 1

#pragma import(__use_no_semihosting)

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

struct __file

; file __stdout;

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

_sys_exit

(int x)

//重定義fputc函式

intfputc

(int ch, file *f)

#endif

stm32串列埠通訊

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

STM32串列埠通訊

1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...

STM32串列埠通訊

串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。串列埠的設定一般可以歸結為以下幾個步驟 1 串列埠時鐘使能,gpio時鐘使能。2 設定引腳復用器對映,呼叫gpio pinafconfig函式...