OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 94|回复: 0

Keil的编译器从AC5升到AC6,代码无变动,SPI默认输出就从原先的高电平变成了低电平

[复制链接]

5

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2020-3-17
在线时间
41 小时
发表于 7 天前 | 显示全部楼层 |阅读模式
10金钱
最近想让keil编译器支持C/C++混合编程,在添加C++文件前,先拿了个原先正常运行的屏幕驱动的C工程将编译器从AC5转换到AC6进行重新编译,编译无报错。

HAL库的SPI初始化代码如下:(喜欢VSCode的界面风格,所以用的VSCode编写代码+Keil编译的方式)
联想截图_20251024152656.jpg

显示屏初始化代码段:
联想截图_20251024152607.jpg
这里添加了个SPI3->CR |= 1 << 0; 和SPI3->CR |= 1 << 1;的操作寄存器的语句,目的是为了重新将SPI3配置为第3模,即CLK和MOSI引脚默认输出高电平。

AC5编译器(-03优化)及编译结果:
联想截图_20251024152716.jpg

AC6编译器(-0z优化)及编译结果:
联想截图_20251024152749.jpg

以下是AC5编译后,代码运行在屏幕初始化的代码段时的波形图:(黄色波形为DC(数据/命令)控制线的波形、蓝色波形为SPI的MOSI数据波形)
RigolDS3.png
可以看到SPI的MOSI引脚在默认状态下是高电平。

以下是AC6编译后,代码运行在屏幕初始化的代码段时的波形图:
RigolDS4.png
可以发现此时SPI的MOSI引脚在默认状态变为了低电平,而且前面多了一次DC控制线下拉到命令模式的操作,但是代码却与AC5编译的是同一套代码。
使用keil的DEBUG查看SPI3和GPIO的寄存器配置项,发现都是正确的。
恳请各路大佬帮忙分析下这个是什么原因。





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


关闭

原子哥极力推荐上一条 /1 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-10-31 01:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表