IDE软件实现注意事项

一、代码的位置

区域标记 用途
/* USER CODE BEGIN 0 */ 放头文件、宏定义、函数声明、fputc 重定向
/* USER CODE BEGIN PV */ 放全局变量(整个文件可用)
/* USER CODE BEGIN PD */ 放宏定义(#define)
/* USER CODE BEGIN PFP */ 放私有函数声明(函数原型) ,如 static void MyFunction(void);
/* USER CODE BEGIN PM */ 放私有宏定义,通常用于复杂宏或调试宏,与 PD 类似但语义更侧重"宏函数"
/* USER CODE BEGIN 2 */ main 函数初始化后、while 循环前执行的代码
/* USER CODE BEGIN 3 */ while 循环内部末尾的代码
/* USER CODE BEGIN 4 */ 放回调函数、自定义函数
/* USER CODE BEGIN WHILE */ while(1) 循环开头的代码
/* USER CODE BEGIN PTD */ 放用户自定义的类型定义,如 typedef struct、typedef enum

二、printf的实现

cs 复制代码
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

PUTCHAR_PROTOTYPE
{
    HAL_UART_Transmit(&huart6, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
    return ch;
}
#endif

三、HAL_UART_Receive 的data类型注意

uint8_t 后面的 8 就是"8位"的意思,所以它只能是 1 字节,而不是 4 字节。

因为 HAL_UART_Receive 要一次性接收 6 个字节 ,uint8_t data 只能存 1 个字节,而 uint8_t data[7] 才能提供连续的 6 个字节存储空间。

相关推荐
蹊黎9 小时前
Linux 下用 C 语言实现进度条
linux·c语言·单片机
无敌贵点大王13 小时前
从寄存器层面重学STM32(6)——串口USART实战部分
stm32·单片机·嵌入式硬件
庙堂龙吟奈我何13 小时前
二进制和十六进制
stm32·单片机
国科安芯15 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
不昀17 小时前
RMII切到10Mbps,50MHz参考时钟也要降到5MHz吗?
单片机·嵌入式硬件·硬件设计·以太网接口
路上有只喵18 小时前
认识元器件 · 单片机(MCU/MPU/SOC) · 实战篇6
单片机·嵌入式硬件
集芯微电科技有限公司19 小时前
40V/24A高频率增强型GaN HEMT功率开关管/高频DC转换/电动工具/GaN充电器 方案首选
人工智能·科技·单片机·嵌入式硬件·深度学习·神经网络·生成对抗网络
十八岁牛爷爷19 小时前
STM32H7 长时间运行后 HTTP 断连:从“串口还活着”到 TX 描述符错账
stm32·单片机·嵌入式硬件
Lxx_Zw19 小时前
串口命令如何从字符串长成协议:帧头、长度、校验和与状态机
c语言·stm32·单片机·嵌入式硬件
凯基迪科技20 小时前
瑞萨R5F100解密 R8C/RL78 MCU 固件读取与保护机制详解
服务器·网络·单片机