)
一、一些错误1.新建工程时没有STM32芯片可以添加这是由于keil没有添加stm32器件支持包导致的1STM32支持包的安装离线安装安装支持包我这里使用的是江协科技买板子时提供的支持包遇到的问题--安装失败提示乱码这是安装了新版keil的问题在keil安装路径里的ARM文件夹下新建一个文件夹注意不要出现中文然后把要安装的支持包复制到这个文件夹里在这个文件夹里重新安装支持包就能成功安装了。在线安装江协科技的视频教程中提到这种方法速度较慢但我用下来速度还可以2.在工程文件管理窗口里无法添加.h文件点击Add后电脑会有提示音无法添加.h文件到groupe里但是keil没有给任何提示。我尝试出来的解决办法是在左侧项目资源管理器里就可以正常添加二、一些警告1.User\main.c(27): warning: #1-D: last line of file ends without a newline这个警告意思是**源文件 main.c 的最后一行没有以换行符结尾**。## 原因C/C 标准建议每个源文件应以换行符结束\n某些编译器如 ARMCC、IAR、GCC 等会给出警告 #1-D它不影响编译和运行但最好消除。## 解决方法1. **在文件末尾手动添加一个空行**打开 main.c将光标移到文件最后按下 Enter 键确保最后一行是一个空行即文件末尾多一个换行。保存后重新编译警告就会消失。2. **如果使用 IDE**- 在 Keil 中点击文件末尾按回车即可。- 在 VS Code、Notepad 等编辑器中开启“显示所有字符”功能确认文件末尾有 LF 或 CRLF。## 补充说明- 这个警告级别较低不解决也完全没问题但很多项目规范要求代码文件以换行结尾方便版本控制 diff 和工具链处理。保存文件后重新编译即可。2.#188-D: enumerated type mixed with another type这个警告#188-D: enumerated type mixed with another type表示你在使用枚举类型enum的地方直接传入了整数0而编译器希望使用枚举常量这可能导致类型安全隐患。问题分析代码GPIO_WriteBit(GPIOA, GPIO_Pin_0, 0);第三个参数0是int类型但GPIO_WriteBit的第三个参数声明为枚举类型通常为BitAction例如在 STM32 标准外设库中定义为typedef enum { Bit_RESET 0, Bit_SET } BitAction;虽然0在数值上与Bit_RESET相等但混合使用枚举和整数会触发此警告影响代码可读性和可维护性。解决方法1.使用正确的枚举常量推荐将0替换为Bit_RESET或RESET视库版本而定GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);如果使用 HAL 库则可能是HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET);2.显式类型转换不推荐仅作为临时方案你可以强制转换GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);但这样做既不够清晰也容易在将来修改枚举定义时产生问题所以应尽量避免。3.检查函数原型如果确认第三个参数确实是枚举请查看对应头文件如stm32f10x_gpio.h中BitAction的定义使用其定义的Bit_SET/Bit_RESET。4.全局替换如果你在多个位置写了GPIO_WriteBit(..., 0)可以批量替换为..., Bit_RESET)并确保所有1替换为Bit_SET。补充说明该警告不会导致编译失败但消除它可以让代码更严谨减少潜在的逻辑错误。