STM32Cube的串口設置(二)一個串口接收另一個串口發送

串口系列
STM32Cube的串口設置(一)即學即用

通過串口設置第一部分大家應該基本會使用單個串口進行收發了

所以本次介紹通過串口進行轉發
【適合情景爲一個串口設備波特率爲38400,但是接收模塊僅支持115200波特率】

一、基本思路

在以上情況下,我們就需要兩個串口和一個存儲位置,在一個串口接收一個信號之後通過MCU轉發到另一個串口以不同的波特率輸出。

二、操作步驟

要求:通過串口向PC發送一段字符

1、根據自己的stm32的芯片型號來選擇,我這裏是STM32F767IGTx

在這裏插入圖片描述

2、選好芯片之後照舊設置RCC爲外部時鐘

在這裏插入圖片描述

3、使能串口1、3(usart1、usart3),如圖:

模式設爲異步(Asynchronous)其他默認,波特率可以自己改,USART1爲115200Bits/s,USART3爲38400Bits/s。
在這裏插入圖片描述
在這裏插入圖片描述
之後再使能串口1、3中斷
在這裏插入圖片描述

4、設置中斷優先級,如圖:

在這裏插入圖片描述
在這裏插入圖片描述

設置中斷優先級在這裏插入圖片描述

5、看原理圖,找到串口對應引腳,如圖:

我這裏是

PA10——>USART1_RX  
PA9——>USART1_TX

PB11——>USART3_RX  
PB10——>USART3_TX

串口1
串口3

6、根據對應引腳設置串口引腳,如圖:

找到PA9、PA10引腳左鍵點擊分別選擇USART1_TX和USART1_RX
(不用擔心選錯選反,針腳的功能是ST公司已經定義好了的)
在這裏插入圖片描述
在這裏插入圖片描述

7、設置時鐘樹,如圖:

這裏會搞的按自己習慣搞,不會搞的默認就好,但是不能有裏面是紅色的框(紅色框就是錯了意思)
在這裏插入圖片描述

8、項目設置,如圖:

紅框裏的按照自己的Keil版本來
在這裏插入圖片描述
個人喜歡把.c/.h文件分開
在這裏插入圖片描述

9、點擊右上角的‘GENERATE CODE’直接生成代碼,如圖:

在這裏插入圖片描述

10、生成代碼後用Keil打開項目並在Application/User中找到usart.c並在/USER CODE BEGIN 0/後添加如下代碼,如圖:

#include <stdio.h>
struct __FILE 
{ 
	int handle; 
}; 

FILE __stdout;       
void _sys_exit(int x) 
{ 
	x = x; 
} 
int fputc(int ch, FILE *f)
{ 	
	while((USART3->ISR&0X40)==0);
	USART3->TDR=(uint8_t)ch;      
	return ch;
}

uint16_t USART3_RX_STA=0;
uint8_t USART3_RX_BUF[800];//串口轉存空間

在這裏插入圖片描述

11、生成代碼後用Keil打開項目並在Application/User中找到main.c:

在/USER CODE BEGIN PV/後添加如下代碼

extern uint8_t USART3_RX_BUF[800];//重申明外部轉存空間

在/* USER CODE BEGIN WHILE */後添加如下代碼

	HAL_UART_Receive_IT(&huart3,USART3_RX_BUF,1);	
	HAL_UART_Transmit(&huart1,USART3_RX_BUF,sizeof(USART3_RX_BUF),100);
	\\開啓中斷

在/* USER CODE BEGIN 4 */後添加回調函數

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{

	if(huart->Instance == USART3)
	{
		HAL_UART_Transmit(&huart1,USART3_RX_BUF,1,100);//串口1發送接收buff裏的東西	
		HAL_UART_Receive_IT(&huart3,USART3_RX_BUF,1);	//重新開啓串口3接收中斷	
	}
}

編譯、下載

三、實驗驗證

正所謂沒有實驗結果的教程都是耍流氓,出結果

目的是USART3接收後通過USART1發送出來,爲了正確表達實驗內容,首先我將USART3的輸入直連在USB,在PC端展示一下USART3的發送內容(這裏用了GPS+BD模塊):
直連
上圖相當於把GPS輸出直連USB,所以打開串口調試助手,波特率設置爲38400Bits/s
串口三接收的數據
改回原樣後重新連接SUART1看情況,USART1的比特率爲115200Bits/s,所以串口調試助手波特率也相應進行修改
USART1
可知USART1輸出和USART3接收的數據一致,到此試驗成功。

		  Good Game!!!!!!

接下來會推出一系列的關於串口使用的分享,有需要的猿們敬請關注!!!!!

以上內容歡迎大家轉載引用,標明出處即可!!!!!

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