一来让自己可以回顾开发历程,二来帮助后来者快速上手,知识总是需要共享才有价值。
1.遇到了无法解析标识符
解决方法:我的项目之前创建在c盘admin下面,后来换到D盘全英文目录下就没有报错可以正常通过编译了。
2.SSP1CON2 = SSP1CON2 | bit0;这个语句编译的时候遇到warming:
mian.c:205: warning: (373) implicit signed to unsigned conversion
3.使用MPLAB® Xpress EVALUATION BOARD 的pickit3接口,出错log如下
PICkit3报错
Connectingto MPLAB PICkit 3...
Currentlyloaded firmware on PICkit 3
FirmwareSuite Version.....01.51.08
Firmwaretype..............Enhanced Midrange
Targetdevice was not found (could not detect target voltage VDD). You must connect toa target device to use PICkit 3.
程序界面报错
Loadingcode from D:/MPLABXProjects/BreathingLED/Breathing_LED.X/dist/free/production/Breathing_LED.X.production.hex...
Loadingcompleted
Connectingto programmer...
Programmingtarget...
Theprogrammer could not be started: Failed to program the target device
原来是vdd虚焊,所以pickit3么有检测到
之前报错如图
可以参考原因是需要调用指定的PICKIT3固件,在项目属性中点击PICkit 3中的Option categories: Firmware,取消Use LatestFirmware前面的勾选,在下方Firmware File中选择安装路径中的PICKIT3.jar,以MPLAB X IDE v3.35及windows 7 x86环境为例,位置在C:\Program Files/Microchip/MPLABX/v3.35/mplab_ide/mplablibs/modules/ext/PICKIT3.jar/PK3FW_014335.jam。断开目标板,重启编译环境----我当时是只找到了C:\Program Files (x86)\Microchip\MPLABX\v4.15\mplab_ide\mplablibs\modules\ext\PICKIT3.jar
4.microchip官网上有很多关于开发板的开发例子,我先验证了i2c的,但是发现每次都没有成功,后来发现由于emc1001是用的smbus,而不是通用i2c,smbus的频率推荐20k-100k,而例子中的是200k的i2c scl,改成100k,通讯成功读出来manufacture ID。
5.官网的开发板例子导入到自己的板子上,i2c有数据但是无应答,后来测量波形才发现,开发板的scl和sda没有按照数据手册来设置,是反的,而我们自己的板子是正常的,所以出错了,还有不同的板子i2c连接到一起的时候要共地才行。
6.spi用示波器读取的数据发现是反的?
结果是自己的示波器有个测量脚被反向了。。。
7.eeprom无法读取数据?
由于我用的24lc64,100 kHz and 400 kHz clock compatibility,而我的i2c是40k所以不符合要求,改成100k即可
8.如果用mplabx的时候,点击暂停按键,但是光标却没有停留在某行代码上,那么就是你的文件的路径中包含中文导致的。
9.make[2]: *** [dist/free/production/Temperature_Sensor_Output.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
:0: error: (1347) can't find 0x9C400 words (0x9c400 withtotal) for psect "stringtext1" in class "STRCODE" (largest unused contiguous range 0x1800)
(908) exit status = 1
本来想把SPI flash的内容用一个数组放在程序中,结果发现太大了,因为
Memory
• Up to 14 KB Flash Program Memory
• Up to 1 KB Data SRAM
• 256B of EEPROM
• Direct, Indirect and Relative Addressing modes
而我的内容是64kbyte。只能用串口分批往下刷
10. conflicting declarations for variable "_strlen" (main.c:286)
原因是没有include “string.h”
11.ADC转换中,第一次读的ADC的值是不对的,要从第二次开始才对
12.设置外部管脚下降沿中断时,刚开机会发生一次中断,要注意避免