STM32
直播中

张昂笙

7年用户 971经验值
私信 关注
[问答]

求大佬分享STM32串口设置步骤教程

求大佬分享STM32串口设置步骤教程

回帖(1)

彭丞峥

2021-11-23 09:14:35
1. STM32cubemx 串口设置

  代码地址
  1. 新建项目选择芯片。

  2. 设置时钟源

  点击 System Core , 选择RCC 将其时钟源设置为外部晶振,如下图:

  

  

  3.配置时钟树

  将 HCLEK 配置为最大时钟,点击回车,软件归根据芯片自动配置其他总线时钟。

  

  

  3.配置串口

  点击 Connettivity , 选择USART1 将其模式选择为异步通信模式,其他配置串口配置参数根据实际情况修改,如下图:

  

  

  4. 生产代码工程

  配置工程并生成代码。

  

  

  
5. 测试串口输出
打开工程,在main.c中添加如下代码测试代码输出,


HAL_UART_Transmit(&huart1, “testrn”, sizeof(“testrn”), 0xffff);
HAL_Delay(1000);
6. 启用printf函数
新建my_printf.c文件


#include "stdio.h"
#include "main.h"
#ifdef __GNUC_
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
extern UART_HandleTypeDef huart1;        //外部串口
PUTCHAR_PROTOTYPE
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}


测试printf函数,在main.c中添加如下代码测试代码输出,


printf(“test = %d rn”, 1);
HAL_Delay(1000);


7. 设置中断

启用串口全局中断

  

  

  8.配置中断嵌套

  
  

  

  9. 启动中断,添加中断回调函数

  
uint8_t aRxBuffer[1];//接受缓存 接受一个字节进入中断
HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);  //启动接受中断  


//中断回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if (huart->Instance == USART1)
                {
                                HAL_UART_Transmit(&huart1, (uint8_t *)aRxBuffer, 1,0xFFFF);//发送接收数据
                                HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1);//启动下一轮接收
    }
}
举报

更多回帖

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