本帖最后由 lcczg 于 2020-2-13 10:37 编辑
(二)产生自举程序并下载应用程序
这部分的内容是依据前面提到的实验手册的“”实验2“”部分。
1.创建新项目,器件选择PIC16F18446.
2.启动万能的MCC, 选择16MHz的HFINTOSC. 添加EUSART1, memory和Bootloader Generator.
。。。配置管脚,按照板子说明,设RA2为BL_INDICATOR(BOOTLOADER指示灯)。 按照手册往下设置Memory Model。
3.编译
哦,编译失败,错误提示不能找到空间。好吧,对空间加点优化吧,成功了。
4. 使用板载nEDBG下载。
下载后满心期待LED0常亮,指示自举程序正在运行。
然而黑暗一片有木有,LED没亮。进入调试,程序执行没问题,RA2=1。然而板子文档里的说明是接到地(RA=0)亮,反掉了,改改代码(重配BL_INDICATOR_ON,BL_INDICATOR_OFF)再下载,亮了。
5. 继续产生应用程序。
为便于观察,产生一个闪灯的应用程序,用MCC里的PWM.
6. 在官网https://www.microchip.com/promo/8-bit-bootloader最下面右侧下载Bootloader HOST,我们将通过它下载应用程序。
在配置里选择端口,该端口是板子连上USB线后生产的虚拟串口,通常是比较大的,不同电脑显示一般不同。
编程器件,可以看到LED开始闪灯了。结束了?
7. 还没有。
板子掉电上电后又开始闪灯了,进入应用程序了。然而如果还想进入自举吶,再想想。
重新进入自举程序的MCC配置,打开bootloader Generator,
有一个I/O Pin Entry, 这个就是进入自举程序的IO阀门。使能它。在Pin Manager 里选择板上的按键RC2做BL_ENTRY.
重新生成并下载自举工程,用Bootloader HOST下载闪灯应用程序,成功。更改应用程序闪灯频率,按住按键,准备再次进入自举,
然而LED没有常亮,而是在闪。还是进入了应用程序。
怎么回事? 调试代码,没有问题,奇怪。看看板子说明文档里关于按键的介绍,里面很明显的提示要使能管脚的内部上拉。返回Pin Module使能上拉。经过测试OK,现在靠按键终于能重复进入自举了。
(三)总结
总的来说,有一些小插曲,最终却是大圆满。这也让我感受到MCC的强大。
自举和应用的工程在附件里,供大家参考,谢谢。
(四)补充(2020.02.13)
对于XC8 2.10及以后的版本,编译附件的BOOT工程会出现如下错误:
pic16f1_bootload.c:138:: error: (1349) initialization of absolute variable "_EE_Key_1" in RAM is not supported
pic16f1_bootload.c:139:: error: (1349) initialization of absolute variable "_EE_Key_2" in RAM is not supported
这是由于XC的版本差异导致的。XC8 2.10及以后的版本有此限制:不允许对RAM绝对变量初始化,
Absolute variables in RAM cannot be initialized when they are defined, and they are
not cleared by the runtime startup code. After defining absolute variables, assign them
an initial value at a suitable point in your main-line code, if required.
两种解决办法:
1,使用XC8 2.05或以前版本。
2. _EE_Key_1, _EE_Key_2不在定义的时候赋值,在代码中开始的地方去赋值。
|