Keil5在开发中遇到的问题

工程结构

        

BSP:驱动文件夹,用于存放模块以及外设的驱动程序

CMSIS:STM32平台级文件夹,用于存放STM32工程运行的底层代码。

MDK:工程文件目录,搭建完环境生成的工程文件

STM32H7xx_HAL_Driver:HAL库文件目录

System:系统设置

user:用户层代码

何时需要包含 <stdint.h>

  • 需要精确控制变量位宽时(如嵌入式开发、协议解析)。

  • 编写跨平台代码,避免类型歧义。

  • 处理二进制数据或硬件寄存器时(需对齐内存)。

 #include "stdlib.h"包含这个文件有什么用

#include "stdlib.h" 是 C 语言中的一个预处理指令,用于包含标准库头文件 stdlib.h(Standard Library,标准库)。这个头文件提供了许多常用的函数和宏,主要涉及内存管理、随机数生成、字符串转换、程序控制等功能。以下是它的主要用途: 

1. 内存管理函数
  • malloc(size_t size):动态分配内存。

  • calloc(size_t num, size_t size):动态分配并初始化内存为零。

  • realloc(void *ptr, size_t size):重新调整已分配的内存块大小。

  • free(void *ptr):释放动态分配的内存。

int *arr = (int*)malloc(10 * sizeof(int)); // 分配一个包含 10 个整数的数组
free(arr); // 释放内存
2. 随机数生成
  • rand():生成伪随机数。

  • srand(unsigned int seed):设置随机数种子(通常用 time(NULL) 初始化)。

srand(time(NULL)); // 用当前时间作为随机种子
int num = rand() % 100; // 生成 0~99 的随机数
3. 字符串转换
  • atoi(const char *str):将字符串转换为整数。

  • atof(const char *str):将字符串转换为浮点数。

  • strtolstrtoul 等更安全的转换函数。

int num = atoi("123"); // 字符串 "123" → 整数 123
4. 程序控制
  • exit(int status):终止程序,并返回状态码(如 exit(0) 表示成功)。

  • abort():强制终止程序(通常用于异常情况)。

  • system(const char *command):执行系统命令(如 system("pause") 或 system("ls"))。

if (error_occurred) {
    exit(1); // 异常退出
}

uint8_t的本质

uint8_t 不是 unsigned int,而是:

  • 精确的8位无符号整数类型(正好占用1字节)

  • 定义在C99标准的 <stdint.h> 头文件中

  • 典型实现是 typedef unsigned char uint8_t;

(void*)的意义

类型强制转换
  • &USART1_RXbuff 是一个具体类型的指针(如 uint8_t* 或 char*),而 HAL_UART_Receive_IT() 的第二个参数需要 uint8_t* 类型。

  • (void *) 是一种通用指针类型,可以接受任何指针类型。这里通过强制转换确保类型匹配(即使 USART1_RXbuff 的原类型不是 uint8_t

系统时钟配置

HSE(外部高速振荡)相较于HSI(高速内部振荡),更准,HSI会存在误差,受温度影响存在漂移。

PLL(锁相环):用作时钟倍频,把输入的时钟频率倍频成输出频率

外设功能模式设置

推挽输出模式: 可以控制高低电平的输出模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值