STM32的USART窗口通訊程序

一、USART簡介

USART是一個全雙工通用同步/異步串行收發模塊,該接口是一個高度靈活的串行通信設備。
主要特點:

  1. 全雙工操作(相互獨立的接收數據和發送數據);
  2. 同步操作時,可主機時鐘同步,也可從機時鐘同步;
  3. 獨立的高精度波特率發生器,不佔用定時/計數器;
  4. 支持5、6、7、8和9位數據位,1或2位停止位的串行數據楨結構;
  5. 由硬件支持的奇偶校驗位發生和檢驗;
  6. 數據溢出檢測;
  7. 幀錯誤檢測;
  8. 包括錯誤起始位的檢測噪聲濾波器和數字低通濾波器;
  9. 三個完全獨立的中斷,TX發送完成、TX發送數據寄存器空、RX接收完成;
  10. 支持多機通信模式;
  11. 支持倍速異步通信模式。

結構組成:
USART收發模塊一般分爲三大部分:時鐘發生器、數據發送器和接收器。控制寄存器爲所有的模塊共享。
時鐘發生器由同步邏輯電路(在同步從模式下由外部時鐘輸入驅動)和波特率發生器組成。發送時鐘引腳XCK僅用於同步發送模式下,發送器部分由一個單獨的寫入緩衝器(發送UDR)、一個串行移位寄存器、校驗位發生器和用於處理不同幀結構的控制邏輯電路構成。使用寫入緩衝器,實現了連續發送多幀數據無延時的通信。
接收器是USART模塊最複雜的部分,最主要的是時鐘和數據接收單元。數據接收單元用作異步數據的接收。除了接收單元,接收器還包括校驗位校驗器、控制邏輯、移位寄存器和兩級接收緩衝器(接收UDR)。接收器支持與發送器相同的幀結構,同時支持幀錯誤、數據溢出和校驗錯誤的檢測。


二、USART圖示

在這裏插入圖片描述

三、基於寄存器與基於固件庫的stm32 LED流水燈例子的編程方式差異比較:

1、基於寄存器方式的開發特點:
(1)具體參數更直觀;
(2)程序運行佔用資源少。
但是它的缺陷也不可忽視,如下:
(1)開發速度慢;
(2)程序可讀性差;
(3) 維護複雜。
上述缺陷直接影響了開發效率,程序維護成本,交流成本。通常情況下,只有在頻繁調用的中斷服務函數時利用直接配置寄存器的方式。
2、基於固態庫方式開發,也就是直接調用庫函數,特點就是:
(1)外設交流方便;
(2)查錯簡單;
(3)對主控制器STM32上手簡單。
總的來說基於寄存器:資料豐富,容易理解,適合新手學習。
基於固件庫:可移植性強,更貼近底層,要求對工作原理有深入理解,適合有豐富經驗的人使用。












四、STM32的USART串口通信程序實例

  • 打開下載的官方資料包,安裝野火串口調試助手
    在這裏插入圖片描述

  • 在官方資料庫中找到USART1接發文件夾下的keil工程文件,打開工程

在這裏插入圖片描述

  • 打開stm32f10x_it.c文件做如下修改:

在這裏插入圖片描述

  • 打開main.c文件做如下修改:

在這裏插入圖片描述
修改的代碼如下

  • stm32f10x_it.c:
int i=0;
uint8_t ucTemp[50];
void DEBUG_USART_IRQHandler(void)
{
   
   
	if(USART_GetITStatus(DEBUG_USARTx,USART_IT_RXNE)!=RESET)
	{
   
   
		ucTemp[i] = USART_ReceiveData(USART1);	
	}
  if(ucTemp[i] == '!')
	{
   
   
		if(ucTemp[i-1] == '2'&&ucTemp[i-2] == '3'&&ucTemp[i-3] == 'm'&&ucTemp[i-4] == 't'&&ucTemp[i-5] == 's'&&ucTemp[i-6] == ' ')
			if(ucTemp[i-7] == 'p'&&ucTemp[i-8] == 'o'&&ucTemp[i-9] == 't'&&ucTemp[i-10] == 's')
			{
   
   
				printf("收到!");
        while(1);
			}
	}
	i++;
}

  • main.c:
#include "stm32f10x.h"
#include "bsp_usart.h"


void delay(uint32_t count)
{
   
   
	while(count--);
}
int main(void)
{
   
   	
  USART_Config();
  while(1)
	{
   
   	
		printf("hello windows!\n");
		delay(5000000);
	}	
}

  • 編譯調試顯示未出錯後,

在這裏插入圖片描述

點擊魔法棒

在這裏插入圖片描述

進入後選擇debug,在Use下選擇J-Link連接

在這裏插入圖片描述
setting

在這裏插入圖片描述

在這裏插入圖片描述
一切就緒,點擊load將程序燒錄進芯片
打開野火的串口調試助手
在這裏插入圖片描述
可以看到STM32系統給上位機(win10)連續發送“hello windows!
當上位機給stm32發送“Stop,stm32”後,stm32停止發送。
任務完成!





五、參考資料

stm32的串口通信
STM32串口通信USART學習筆記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章