STM32编程常见错误与解决:SPI、中断与初始化顺序
需积分: 37 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开发时,理解并遵循正确的初始化顺序、编写清晰的代码结构、正确处理中断和外部设备通信是避免这些问题的关键。同时,对于编译警告和错误,应仔细阅读并理解其含义,及时进行修正。遇到问题时,检查代码、初始化步骤、启动代码和硬件状态都是有效的解决途径。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2019-07-23 上传
2021-09-30 上传
2021-05-16 上传
2021-10-01 上传
2021-06-07 上传
2022-10-13 上传
Big黄勇
- 粉丝: 66
- 资源: 3905
最新资源
- SpringTest:测试一些弹簧功能
- matlab心线代码-EEG-ECG-Analysis:用于简单EEG/ECG数据分析的MATLAB程序
- Stack-C-language-code.rar_Windows编程_Visual_C++_
- 企业名称:Proyecto Reto 2,企业最终要求的软件,企业最终合同的最终目的是在埃塞俄比亚,而在埃塞俄比亚,企业管理者必须是西班牙企业,要求客户报名参加埃洛斯和埃塞俄比亚普埃登的征状,要求参加比赛的男子应征入伍
- bh前端
- scratch-blocks-mod
- hugo-bs-refreshing
- CRC16ForPHP:这是一个符合modbus协议的CRC16校验算法PHP代码的实现
- SnatchBox(CVE-2020-27935)是一个沙盒逃逸漏洞和漏洞,影响到版本10.15.x以下的macOS。-Swift开发
- dep-selector:使用Gecode的Ruby快速依赖解决方案
- clickrup:与R中的ClickUp v2 API交互
- FelCore
- react-markdown-previewer
- ch.rar_通讯编程_Others_
- 图片:允许您向应用提供高度优化的图片
- matlab心线代码-3DfaceHR:基于3D面部界标的基于视频的HR估计项目