云计算百科
云计算领域专业知识百科平台

嵌入式常见问题解决指南一

  • 在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')

赞(0)
未经允许不得转载:网硕互联帮助中心 » 嵌入式常见问题解决指南一
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!