STMCubeMx——C8T6的串口调试、接收与发送

一、stmCubeMX串口通信的步骤

1、新建一个文件,选择自己的芯片

2、配置时钟

3、配置串口

串口的模式解析可以跳转到以下文章查看

stmCubemx——配置串口时的几种模式-优快云博客在STM32CubeMX中配置串口(USART或UART)时,可以设置多种模式来满足不同的通信需求。https://blog.youkuaiyun.com/weixin_54210362/article/details/142490631?spm=1001.2014.3001.5502

示例配置

假设你需要配置一个异步模式的USART1,波特率为115200,8个数据位,1个停止位,无奇偶校验,并启用中断:

  1. 选择USART1
  2. 设置模式为异步模式
  3. 设置波特率为115200
  4. 设置数据位为8
  5. 设置停止位为1
  6. 设置奇偶校验为无
  7. 启用中断:在“NVIC Settings”中勾选相应的中断。

4、配置时钟树

5、命名,保存项目

6、选择生成文件配置

二、生成的keil文件处理过程

1、usart.c

#include "stdio.h"
extern UART_HandleTypeDef huart1;   //声明串口

/**
  * 函数功能: 重定向c库函数printf到DEBUG_USARTx
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明:无
  */
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}
 
/**
  * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
  * 输入参数: 无
  * 返 回 值: 无
  * 说    明:无
  */
int fgetc(FILE *f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
  return ch;

}

2、main.c文件

命名一个数组,用来接收存储数据

#include "string.h"//需要额外包含的头文件

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#define RXBUFFERSIZE  256
char RxBuffer[RXBUFFERSIZE];
uint8_t aRxBuffer;				//接收中断缓冲
uint8_t Uart1_Rx_Cnt = 0;		//接收缓冲计数

想要验证输出,直接main函数中的循环里面,用printf串口打印自己想要输出的内容就可以

下面的代码是用来实现串口收发功能的,直接定义在main.c文件中就可以

在main函数的循环以外线调用一次接收中断函数

 HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);//接收中断

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function Should not be modified, when the callback is needed,
           the HAL_UART_TxCpltCallback could be implemented in the user file
   */
 
	if(Uart1_Rx_Cnt >= 255)  //溢出判断
	{
		Uart1_Rx_Cnt = 0;
		memset(RxBuffer,0x00,sizeof(RxBuffer));
		HAL_UART_Transmit(&huart1, (uint8_t *)"数据溢出", 10,0xFFFF); 	
        
	}
	else
	{
		RxBuffer[Uart1_Rx_Cnt++] = aRxBuffer;   //接收数据转存
	
		if(HAL_UART_GetState(&huart1) != HAL_UART_STATE_BUSY_RX)  // 检查UART状态,判断是否接收完成
		{
			HAL_UART_Transmit(&huart1, (uint8_t *)&RxBuffer, Uart1_Rx_Cnt,0xFFFF); //将收到的信息发送出去
            while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);//检测UART发送结束
			Uart1_Rx_Cnt = 0;
			memset(RxBuffer,0x00,sizeof(RxBuffer)); //清空数组
		}
	}
	
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer, 1);   //再开启接收中断
}

3、演示结果

三、keil软件配置 

### STM32CubeMX 配置串口通信教程 #### 1. 创建工程并配置时钟 在 STM32CubeMX 中创建一个新的项目,选择目标芯片型号。进入 **Pinout & Configuration** 页面后,在左侧菜单栏找到 **Clock Configuration** 并完成系统时钟的初始化设置[^1]。 #### 2. 添加 UART 外设 切换到 **Connectivity** 菜单下,启用所需的 USART 或 UART 模块(例如 USART1)。点击模块名称右侧的小齿轮图标以打开外设参数配置窗口。在此处可以调整波特率、数据位长度、停止位数量以及校验方式等基本属性[^2]。 #### 3. 设置工作模式为异步中断 在外设高级控制选项里指定操作模式为 Asynchronous,并勾选 Enable Half Duplex 如果需要半双工支持的话;接着转至 NVIC (Nested Vectored Interrupt Controller),激活对应UART RX 和 TX 的中断请求以便后续处理接收到的数据包或者准备好的待发消息队列管理机制。 #### 4. 初始化代码生成 当所有硬件级设定完成后返回 Project Manager 界面定义编译器种类还有文件保存路径等内容之后按下 GENERATE CODE 键盘组合键来获取由工具自动生成的基础驱动框架结构源码文件集合。 #### 5. 编写回调函数用于实际业务逻辑实现 利用 HAL 提供的标准 API 函数 `HAL_UART_Transmit_IT()` 及其伙伴版本接收命令`HAL_UART_Receive_IT()` 来构建应用程序层面上对于特定事件响应的具体措施描述部分。这些接口允许开发者通过传递缓冲区地址连同预期传输字节数量作为输入参量从而触发后台服务线程执行真正的物理链路交互动作。 ```c // Example of using HAL_UART_Transmit_IT() uint8_t data_to_send[] = "Hello from STM32!"; HAL_UART_Transmit_IT(&huart1, data_to_send, sizeof(data_to_send)); ``` 同样地也要记得针对可能发生的错误状况设立妥善保护策略比如超时检测或是异常恢复流程设计等方面考虑周全才能确保整个系统的稳定性表现达到理想水平。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值