STM32
直播中

YYXIAO

8年用户 1102经验值
擅长:接口/总线/驱动
私信 关注
[问答]

怎样通过STM32Cube的串口向PC发送一段字符呢

怎样通过STM32Cube的串口向PC发送一段字符呢?有哪些操作步骤呢?

回帖(1)

李恩琪

2021-12-6 09:41:29
串口系列
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









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
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输出和USART3接收的数据一致,到此试验成功。

                  Good Game!!!!!!


接下来会推出一系列的关于串口使用的分享,有需要的猿们敬请关注!!!!!
以上内容欢迎大家转载引用,标明出处即可!!!!!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分