通訊的分類:序列通訊,並行通訊。
序列通訊: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函式...