作為微控制器開發,經常使用的協議,進行程式的正確性的測試使用。但其實i2c,spi(序列通訊使用最多)在各個器件中使用最多,後面再複習。8位,16位並行通訊也使用多。usart使用也多,藍芽轉串列埠,wifi轉串列埠這2個模組就是使用usart口實現的,你只需要配置好波特率,分頻等一些引數。再使用資料快取暫存器接收傳送就可以使用這2個模組了。(但是這2個模組前提是整合了程式例如:我使用過的藍芽轉串列埠,使用者名稱,密碼都整合進去了,只需要對串列埠引腳:rxd,txd資料操作即可。)
廢話不多說,複習usart通訊協議:
usart是非同步方式進行通訊(一條資料輸入線,一條資料輸出線),與sci協議相同。
起始位+8位資料+奇偶校驗位+停止位(我一般使用8位資料+停止位)。位時間就是波特率,至於波特率的計算就不多說了。正是因為是非同步通訊,不像同步通訊時間是同步,接收的位時間就是傳送位時間。接收的資料就是高低電平,時間不對應自然資料就亂碼了,波特率越高,資料亂碼就越容易產生。所以usart只適合小資料通訊。
而stm32前期使用lib庫程式設計,但仍需要了解一下stm32f10x的暫存器。
暫存器:usart_sr(狀態暫存器), usart_dr(資料暫存器),usart_brr(波特率暫存器),usart_gtpr(智慧卡模式下保護時間暫存器)
irda_rdi(irda模式下的資料輸入),irda_td0(irda模式下的資料輸出) 紅外通訊 ncts(清除傳送),nrts(傳送請求)
usart協議不需要過多講了,貼rs232,rs485的**
rs232:
#include "usart.h"
void usart_init()
//usart1 txd pa_9. usart2 rxd pa_10
,//usart1串列埠中斷函式
void usart1_irqhandler(void) //usart1
static u8 buff;
usart_clearflag(usart1,usart_flag_tc);
if(usart_getitstatus(usart1, usart_it_rxne )!=bit_reset) }
rs485
#include "rs485.h"
void rs485_init() //usart2
//與rs232c配置差不多,加入了pg3用作使能控制方向。
//中斷函式
void usart2_irqhandler(void) //usart2,rs485
}
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 03 USART(串列埠通訊)
usart初始化結構體 該結構體必須配置 1typedef struct usart inittypedef 以及 usart時鐘初始化結構體,一般usart用作非同步通訊,不需要配置 1typedef struct usart clockinittypedef 配置usart相關暫存器的過程 先初...