STM32编程常见错误与解决:SPI、中断与初始化顺序

需积分: 37 4 下载量 110 浏览量 更新于2024-08-06 收藏 157KB PDF 举报
"这篇文档主要讨论了在使用Keil5进行STM32开发时遇到的各种常见错误和问题,包括编程逻辑错误、编译警告、初始化顺序、复位问题、文件找不到、函数声明不匹配以及中断处理相关的错误。作者列举了自己的错误实例以及朋友遇到的问题,并给出了相应的解决方法。" 详细知识点: 1. 循环不可达警告:`#128-D: loop is not reachable from preceding code`,这意味着代码中的循环在当前条件下无法被执行,通常是因为存在未满足的条件导致。这需要检查循环的入口条件和控制变量。 2. 文件末尾缺少换行符警告:`#1-D: last line of file ends without an newline`,这表示源代码文件的最后缺少一个换行符,虽然不影响编译,但建议修正以保持代码规范。 3. 定义与声明的位置错误:`#268: declaration may not appear after executable statement in block`,在C语言中,变量必须在执行语句之前声明。如果在执行语句(如函数调用)之后声明变量,编译器会报错,需要调整变量定义的位置。 4. 板子复位问题:有时设备复位不当会导致程序无法正常运行,可能需要重新复位或者重新上电以解决问题。 5. 下载文件未找到:可能由于编译错误或其他问题导致目标文件没有生成,确保代码无误并成功编译后再尝试下载。 6. 函数声明不一致:`#223-D: function "initNvic" declared implicitly` 和 `#159: declaration is incompatible with previous "initNvic"`,表明函数`initNvic`在使用前未正确声明或声明与定义的参数类型不匹配,需要在调用前正确声明函数。 7. SPI通信错误: - 忘记设置CS片选信号:在SPI通信中,CS信号至关重要,用于选择从设备。正确的做法是在开始通信前设置CS为低,发送数据后将其设置为高。 - 初始化顺序错误:初始化SPI接口时,应先初始化RCC,再初始化GPIO,最后初始化SPI本身。 - RCC外设初始化遗漏:在初始化RCC时,需确保包含了SPI外设的初始化。 8. 中断处理错误: - 启动代码不同导致中断问题:不同的启动代码可能会影响中断向量表的配置。如果在调试中断时遇到问题,应检查启动代码是否正确配置了中断向量,并可能需要使用特定版本的启动代码,如`stm32f10x_vector.s`。 总结:在进行STM32开发时,理解并遵循正确的初始化顺序、编写清晰的代码结构、正确处理中断和外部设备通信是避免这些问题的关键。同时,对于编译警告和错误,应仔细阅读并理解其含义,及时进行修正。遇到问题时,检查代码、初始化步骤、启动代码和硬件状态都是有效的解决途径。