在线时间191 小时
UID190071
ST金币0
蝴蝶豆0
注册时间2010-5-29
金牌会员
- 最后登录
- 2020-11-23
|
发表于 2016-1-29 15:42:07
|
显示全部楼层
a0a.1 32b0c
通常我们进行端口配置时都用下面的格式
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_2;
GPIO_Init(GPIOA,&GPIO_InitStructure);
你是否想过漏了一行会出现什么后果吗。我前几天做一个IIC模拟驱动就遇到一个奇怪的事。半个月前搞到一个STM32F030的芯片完成了一个产品的开发。
随后想用这个板做一个MPU6050的程序,因为MPU6050要用到IIC通讯所以从网上下了一个“STM32F030模拟IIC接口 OLED 测试程序”,把它的IIC程序加到我的程序中来。
随后开始调试。
这时奇怪的事就出现了,我用的编程软件是MDK V5.17,当我点击“Debug”把程序下载到芯片时,芯片就死了无法进行仿真,退出“Debug”状态,点击“Options for Target",再点击“Debug”,查看“Setings"发现仿真器已不认该芯片了,好在手上有好几个板呢,换一块板试试现象完全一样。
因为程序还没调试,也无法调试所以没想到是程序的问题。总共只有10颗芯片做产品用去两颗还有8颗,先想到的是救回这两颗芯片,用J-flash擦除不管,无法通讯,再换用ST-LINK擦除还是不管,也是无法通讯。后来用串口通讯把芯片擦除了。
反复试了几次,只要点击“Debug”芯片就死了,死了就用串口擦除,因为我以前一直用的MDK V4.72,对MDK V5.17不是太熟练所以又卸载了MDK V5.17安装了MDK V4.74(MDK V4.72不支持STM32F030),再编译奇怪的现象有出现了,原来6点几K的程序居然变为18点几K,超出了芯片范围,压缩程序把程序压缩到12K再开始调试,可以单步执行,就是无法进入main。
分析以下可能是程序的问题,重新开始调试,先把程序注释掉,在一条一条放开当执行到IIC_Configuation(),时芯片就死了,再把IIC_Configuation()里的语句注释掉,在一条一条放开这时发现居然没有“GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6;”,问题肯定在这里了赶紧加上去一调试成了。
没想到少了一条语句居然有这样的问题。 |
|