- 在Debug模式下,多按几次自动运行,程序才可以运行起来

在魔法棒里把Use MicroLIB打勾✓
- STM32F103的软件模拟I2C移植到F407无法正常运行
在将103的i2c代码移植到407时,因为407的主频比103高,所以时钟线数据线拉高拉低时,要加几微秒delay延时。(103的主频不高,不加delay也可正常运行,一般来说为了规范也是会加的)
- 读取FLASH内容发现有乱码
排除数据本身有问题,以下是两种解决方法:
1.降低SPI所用的GPIO口速率:GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
(将原来的GPIO_Speed_100MHz改为GPIO_Speed_50MHz)
2.增加SPI的波特率分频器值:
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
(尝试将2分频改为4分频)
- 从网络API或云平台接收的数据有乱码
大部分网络API接口或云平台返回的数据是UTF-8格式,如果有乱码,可能是Keil5中选择了GB2312编码格式。要将Keil5的代码使用工具转码为UTF-8编码格式,并且在Keil5的设置中选择UTF-8格式。(改为UTF-8后若有报错看下一条↓)
- 选择UTF-8格式后,有汉字的乱码报错
![]()
要在魔法棒对应区域添加–no-multibyte-chars

- 程序运行时,Debug模式下发现程序卡死在B.处
开启了中断,但是没有中断处理函数或者函数名字标号错误。
- TIM_SetCompare函数不起作用或其他的TIM问题
原因是在配置TIM的时基单元时,没有使用TIM_TimeBaseStructInit对不需要的结构体成员进行初始化,虽然那些高级定时器才用到的结构体成员配置了也没用,但也不能空着,必须要先对他们初始化。(使用了2个及以上的定时器,这种问题容易出现)

- if判断出现错误,真的判假,假的判真
当a=1时,if(a==1)却判断为假,或者a=1时,if(a!=1)却判断为真,使用CubeMX生成的工程,这种问题容易出现,需要将Keil5的优化等级调为0。

- 使用手机蓝牙助手向单片机发送一个数字1,用if(x==1)却无法成功判断
排除硬件问题,是手机蓝牙助手将你想发的数字1当成字符'1'发送了。(使用串口助手时也要注意这个问题)以下两种解决方法二选一:
1.将手机蓝牙助手的设置改为发送十六进制数据
2.将if(x==1)改为if(x=='1')
网硕互联帮助中心


评论前必须登录!
注册