STM32串口通信以寄存器地址和HAL两种方式实验Hello Windows!
目錄
- 一、stm32串口通信
- 1.1 串口通信協(xié)議
- 1.2 通信接口
- 1.3 串口通信分類
- 1.4 STM32串行通信的通信方式
- 1.5 STM32串行通信
- 1.6 功能引腳
- 1.7 數(shù)據(jù)寄存器
- 2.1 RS-232通信協(xié)議
- 2.2 RS-232串口簡介
- 3.1 USB轉(zhuǎn)串口CH341接線
- 二、STM32的USART串口通信
- 1.1 題目要求
- 1.2 器件準備
- 1.3 USB轉(zhuǎn)TTL與C8T6相連
- 1.4 CH341驅(qū)動安裝
- 三、用寄存器地址實現(xiàn)stm32串口通信
- 四、 用HAL庫的方式
- 4.1 創(chuàng)建工程,配置參數(shù)
- 4.2 代碼編寫
- 4.3 燒錄編譯
- 五、總結(jié)
- 六、參考鏈接
一、stm32串口通信
1.1 串口通信協(xié)議
- 串口是顯控設備與信號處理板之間通信的主要接口,也是顯控設備與其他設備、設備與設備之間的協(xié)議數(shù)據(jù)幀通信傳輸?shù)闹匾涌凇?[2] 串口通信指串口按位(bit)發(fā)送和接收字節(jié)。盡管比特字節(jié)(byte)的串行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。串口通信協(xié)議是指規(guī)定了數(shù)據(jù)包的內(nèi)容,內(nèi)容包含了起始位、主體數(shù)據(jù)、校驗位及停止位,雙方需要約定一致的數(shù)據(jù)包格式才能正常收發(fā)數(shù)據(jù)的有關(guān)規(guī)范。串口通信協(xié)議是基于串口使得通信雙方能夠相互溝通信息的一種約定,其定義了雙方遵循的協(xié)議數(shù)據(jù)幀格式和其傳輸方式。 [2] 在串口通信中,常用的協(xié)議包括RS-232、RS-422和RS-485。
1.2 通信接口
1.3 串口通信分類
送數(shù)據(jù)輸出引腳。
RX: 接收數(shù)據(jù)輸入引腳。
SW_RX: 數(shù)據(jù)接收引腳,只用于單線和智能卡模式,屬于內(nèi)部引腳,沒有具體外部引 腳。
nRTS: 請求以發(fā)送(Request To Send),n表示低電平有效。如果使能 RTS流控制,當 USART 接收器準備好接收新數(shù)據(jù)時就會將 nRTS變成低電平;當接收寄存器已滿時, nRTS將被設置為高電平。該引腳只適用于硬件流控制。
nCTS: 清除以發(fā)送(Clear To Send),n 表示低電平有效。如果使能 CTS流控制,發(fā)送 器在發(fā)送下一幀數(shù)據(jù)之前會檢測 nCTS引腳,如果為低電平,表示可以發(fā)送數(shù)據(jù),如果為 高電平則在發(fā)送完當前數(shù)據(jù)幀之后停止發(fā)送。該引腳只適用于硬件流控制。 SCLK:發(fā)送器時鐘輸出引腳。這個引腳僅適用于同步模式。
1.7 數(shù)據(jù)寄存器
USART 數(shù)據(jù)寄存器(USART_DR)只有低 9位有效
一般使用 8位數(shù)據(jù)字長。
USART_DR 包含了已發(fā)送的數(shù)據(jù)或者接收到的數(shù)據(jù)。
2.1 RS-232通信協(xié)議
若是芯片與PC機(或上位機)相連,除了共地之外,就不能這樣直接交叉連接了。
盡管PC機和芯片都有TXD和RXD引腳,但是通常PC機(或上位機)通常使用的都是RS232接口(通常為DB9封裝),因此不能直接交叉連接。
RS232接口是9針(或引腳),通常是TxD和RxD經(jīng)過電平轉(zhuǎn)換得到的。因此,要想使得芯片與PC機的RS232接口直接通信,需要也將芯片的輸入輸出端口也電平轉(zhuǎn)換成rs232類型,再交叉連接。
經(jīng)過電平轉(zhuǎn)換后,芯片串口和rs232的電平標準是不一樣的:
單片機的電平標準(TTL電平):+5V表示1,0V表示0;
Rs232的電平標準:+15/+13 V表示0,-15/-13表示1。
RS-232通訊協(xié)議標準串口的設備間通訊結(jié)構(gòu)圖如下:
因此,單片機串口與PC串口通信遵循下面的連接方式:
在單片機串口與上位機給出的rs232口之間,通過電平轉(zhuǎn)換電路,實現(xiàn)TTL電平與RS232電平之間的轉(zhuǎn)換。
2.2 RS-232串口簡介
RS232接口(封裝D89)
通信過程中只有兩個腳參與通信,電路連接時,連接三個腳即可。
2腳:電腦的輸入RXD
3腳:電腦的輸出TXD 通過2 ,3 腳就可以實現(xiàn)全雙工(可同時收發(fā))的串行異步通信
5腳:接地
PC串口與單片機串口連接方式:
其中,DB91是在電腦上的 DB92是在單片機實驗板上焊接著的
如果電腦沒有rs232口,只有USB口,可以用串口轉(zhuǎn)接線轉(zhuǎn)出串口,在電腦上位機上需要安裝驅(qū)動程序。
用串口通信比USB簡單,因為串口通信沒有協(xié)議,使用方便簡單。
3.1 USB轉(zhuǎn)串口CH341接線
USB轉(zhuǎn)串口模塊可以使用5V電壓供電,需要將跳帽按下圖安裝。
USB轉(zhuǎn)串口模塊可以使用3.3V電壓供電,需要將跳帽按下圖安裝。
可以對USB轉(zhuǎn)串口模塊進行測試,將USB的電壓引腳用跳帽接上,然后將RXD和TXD兩個引腳用跳帽或者杜邦線接上。
然后打開串口終端,點擊“手動發(fā)送”或者“自動發(fā)送”,如果在接收區(qū)可以接收到數(shù)據(jù),說明USB轉(zhuǎn)串口模塊工作正常,否則需要檢查接線是否正確、電路板元器件是否損壞。
USB轉(zhuǎn)串口電路板與單片機的接線圖,VCC接線是為了單片機供電,USB轉(zhuǎn)串口的RXD引腳與單片機的TXD引腳相連,USB轉(zhuǎn)串口的TXD引腳與單片機的RXD引腳相連,兩者的GND引腳直接相連。
二、STM32的USART串口通信
1.1 題目要求
完成一個STM32的USART串口通訊程序(查詢方式即可,暫不要求采用中斷方式),要求:
(1)設置波特率為115200,1位停止位,無校驗位;
(2)STM32系統(tǒng)給上位機(win10)連續(xù)發(fā)送“hello windows!”。win10采用“串口助手”工具接收。
(3)在沒有示波器條件下,可以使用Keil的軟件仿真邏輯分析儀功能觀察管腳的時序波形,更方便動態(tài)跟蹤調(diào)試和定位代碼故障點。 請用此功能觀察串口輸出波形,并分析其波形反映的時序狀態(tài)正確與否,高低電平轉(zhuǎn)換周期(LED閃爍周期)實際為多少。
1.2 器件準備
STM32F103C8T6最小核心板
USB轉(zhuǎn)TTL
CH340驅(qū)動(USB串口驅(qū)動)_XP_WIN7共用
串口調(diào)試助手XCOM V2.3
1.3 USB轉(zhuǎn)TTL與C8T6相連
連接示意表
實際連接圖如下
1.4 CH341驅(qū)動安裝
下載鏈接:
??CH340/CH341
????Windows 驅(qū)動鏈接:https://www.wch.cn/download/CH341SER_EXE.html/
打開網(wǎng)頁,點擊下載
下載好后,點擊應用程序,再點擊安裝
在電腦設備管理器處查看有無com端口出現(xiàn),有即可證明成功。
三、用寄存器地址實現(xiàn)stm32串口通信
建立模板要用到的SYSTEM文件及啟動文件,包括點燈時需要的C8T6數(shù)據(jù)手冊,以及燒錄用到的FlyMcu,網(wǎng)盤自取。
鏈接:https://pan.baidu.com/s/1jxbVCa_filfR9ZRlmP6SMw
提取碼:k4lv
以下步驟都在keil下操作
- 新建工程light
- 將startup_stm32f10x_md.s這個啟動文件復制你所建的工程目錄下,然后雙擊Source Group1添加(add))即可在新建USER和DAIMA文件和復制SYSTEM啟動文件到工程目錄下。
- 點擊Target 1,再點擊Manage Project ltems…
在上面對話框的中間欄,點新建(用紅圈標出)按鈕(也可以通過雙擊下面的空白處實現(xiàn)),新建 USER 和 SYSTEM 兩個組。然后點擊 Add Files 按鈕,把 SYSTEM 文件夾三個子文件夾里面的:sys.c、usart.c、delay.c 加入到 SYSTEM 組中。注意:此時 USER 組下還是沒有任何文件,我們只添加SYSTEM的三個。
- 點擊 OK,退出該界面返回 IDE。
此時界面如圖所示
- 接著,我們新建一個 test.c 文件,并保存在 USER 文件夾下。然后雙擊 USER 組,會彈出加載文件的對話框,此時我們在 USER 目錄下選擇 test.c 文件,加入到 USER 組下。
- 注意編譯之前點擊魔法棒,設置output生成.hex文件,路徑放在OBJ文件里
- 接著,再設置 Listings 文件路徑,在圖 3.2.16 的基礎上,打開 Listing 選項卡→點擊 Select
Folder for Listings→找到 OBJ 文件夾→點擊 OK
注:OBJ自己是新建的文件,用于存放編譯器編譯時后產(chǎn)生的 c/匯編/鏈接的列表清單
生成的.hex文件也放在里面便于尋找和后面燒錄,主要是方便管理和查找。
- 加入sys、delay、usart的include路徑:
在下載的SYSTEM組下,只需修改usart.c和編寫寫test.c文件即可。
在usart.c修改的代碼如下
void uart_init(u32 pclk2,u32 bound) { float temp;u16 mantissa;u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIVmantissa=temp; //得到整數(shù)部分fraction=(temp-mantissa)*16; //得到小數(shù)部分 mantissa<<=4;mantissa+=fraction; RCC->APB2ENR|=1<<2; //使能PORTA口時鐘 RCC->APB2ENR|=1<<14; //使能串口時鐘 GPIOA->CRH&=0XFFFFF00F;//IO狀態(tài)設置GPIOA->CRH|=0X000008B0;//IO狀態(tài)設置 RCC->APB2RSTR|=1<<14; //復位串口1RCC->APB2RSTR&=~(1<<14);//停止復位 //波特率設置USART1->BRR=mantissa; // 波特率設置 USART1->CR1|=0X200C; //1位停止,無校驗位. #if EN_USART1_RX //如果使能了接收//使能接收中斷 USART1->CR1|=1<<5; //接收緩沖區(qū)非空中斷使能 MY_NVIC_Init(3,3,USART1_IRQn,2);//組2,最低優(yōu)先級 #endif }在test.c中修改的代碼:
#include "sys.h" #include "usart.h" #include "delay.h" int main(void) { u16 t; u16 len; u16 times=0;Stm32_Clock_Init(9); //系統(tǒng)時鐘設置delay_init(72); //延時初始化uart_init(72,115200); //串口初始化為115200while(1){if(USART_RX_STA&0x8000){ len=USART_RX_STA&0x3FFF;//得到此次接收到的數(shù)據(jù)長度printf("\r\n Hello Windows! \r\n\r\n");for(t=0;t<len;t++){USART1->DR=USART_RX_BUF[t];while((USART1->SR&0X40)==0);//等待發(fā)送結(jié)束}printf("\r\n\r\n");//插入換行USART_RX_STA=0;}else{times++;if(times%200==0)printf("Hello Windows!\r\n"); delay_ms(10); }} }-
編譯結(jié)果
-
沒有報錯!
那么就可以進行燒錄了。 -
借助Flymou進行燒錄
-
百度云盤資源
鏈接:https://pan.baidu.com/s/1VxMUZFOVvpAf-L_YbATMag
提取碼:fasf
-
用XCOM串口觀察助手
-
打開XCOM串口助手,彈出界面點擊打開串口,即可以接收到C8T6發(fā)送的數(shù)據(jù)Hello Windows!
四、 用HAL庫的方式
4.1 創(chuàng)建工程,配置參數(shù)
打開Stm32CubeMX并創(chuàng)建工程
選擇stm32F103C8開發(fā)板,開始工程
Mode選擇異步通信(Asynchronous):
勾選Enabled:
配置項目設置(名稱、位置、環(huán)境):
生成項目:
4.2 代碼編寫
- Stm32CubeMX設置好后跳轉(zhuǎn)到keil上
- 在main.c中定義STM32需要給上位機發(fā)送的消息:
- 在main.c中定義一個延時函數(shù),來使設置發(fā)送的時間間隔:
- 在while循環(huán)中調(diào)用查詢,并調(diào)用延時函數(shù):
- 執(zhí)行結(jié)果
4.3 燒錄編譯
打開FlyMcu 選擇剛剛程序編譯生成的hex文件,并搜索串口并燒錄
打開XCOM串口觀察小助手
五、總結(jié)
keil沒有成功build的話,可能是代碼本身問題,也可使魔法棒里的一些設置問題。燒錄沒成功可能是實驗操作時的一些沒有注意到的小問題,一步一步的找出問題,實踐出真知,都能解決的。
六、參考鏈接
https://blog.csdn.net/qq_43328313/article/details/106439088
https://blog.csdn.net/qq_46467126/article/details/120841504?spm=1001.2014.3001.5502
總結(jié)
以上是生活随笔為你收集整理的STM32串口通信以寄存器地址和HAL两种方式实验Hello Windows!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 驾照新规4月起实施:有驾驶经历者可直接申
- 下一篇: java信息管理系统总结_java实现科