串口系列
STM32Cube的串口设置(一)即学即用
通过串口设置第一部分大家应该基本会使用单个串口进行收发了
所以本次介绍通过串口进行转发
【适合情景为一个串口设备波特率为38400,但是接收模块仅支持115200波特率】
在以上情况下,我们就需要两个串口和一个存储位置,在一个串口接收一个信号之后通过MCU转发到另一个串口以不同的波特率输出。
要求:通过串口向PC发送一段字符
模式设为异步(Asynchronous)其他默认,波特率可以自己改,USART1为115200Bits/s,USART3为38400Bits/s。
之后再使能串口1、3中断
设置中断优先级
我这里是
PA10——>USART1_RX
PA9——>USART1_TX
PB11——>USART3_RX
PB10——>USART3_TX
找到PA9、PA10引脚左键点击分别选择USART1_TX和USART1_RX
(不用担心选错选反,针脚的功能是ST公司已经定义好了的)
这里会搞的按自己习惯搞,不会搞的默认就好,但是不能有里面是红色的框(红色框就是错了意思)
红框里的按照自己的Keil版本来
个人喜欢把.c/.h文件分开
#include
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];//串口转存空间
在/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输出和USART3接收的数据一致,到此试验成功。
Good Game!!!!!!
接下来会推出一系列的关于串口使用的分享,有需要的猿们敬请关注!!!!!
以上内容欢迎大家转载引用,标明出处即可!!!!!