+程序下载
由于我没有J-link,所以想使用串口下载.开发板使用USB转串口芯片PL2303连接到了stm32F103c8的USART1上.从数据手册上了解到.
在 STM32F10xxx 里,可以通过 BOOT[1:0] 引脚选择三种不同启动模式
网上找了一个直观一点的
通过设置选择管脚,对应到各种启动模式的不同物理地址将被映像到第 0 块 ( 启动
存储区 ) 。在系统复位后, SYSCLK 的第 4 个上升沿, BOOT 管脚的值将被锁存。
用户可以通过设置 BOOT1 和 BOOT0 引脚的状态,来选择在复位后的启动模式。
在经过启动延迟后, CPU 从位于 0x0000 0000 开始的启动存储区执行代码。
内嵌的自举程序用于通过 USART1 串行接口对闪存存储器进行重新编程。这个程
序位于系统存储器中,由 ST 在生产线上写入。
开发板上的电路可知
Boot0是引出来了,但是boot1没有引出来.所以需要自己小心的操作.实现串口下载,boot0为”1”,boot1为”0”.即下载程序时把BOOT1接地,BOOT0接VDD.
使用网上下载的MCUISP(ISP下载器) V0.993下载固件。
恢复启动:程序运行。
最初下载程序后程序不运行,我在这里说明一下我的解决办法,分享给碰到同样问题的人,免得耽搁时间。搞技术的,要懂得分享,切记不要以为这个问题很简单而不为之。
由于我使用了串口重定义为控制台,使用printf打印,从而导致程序不能运行。加入printf不只是运行到printf才死机,其实在stm32f10x_vector.s的启动代码里面已经死掉了。解决办法就是把下图的指示处勾上,在编译下载,即可解决问题。
勾选后编译,代码生成量一下子小了50%~60%,何乐而不为。但是……接着说,
至于microLIB,microlib是缺省C库的备选库,功能较少,不具备某些ISO C特性,只适用于需要极少量内存的、不在操作系统运行的深层嵌入式应用程序。microLIB不能将main声明为使用函数,不能返回内容。不支持stdio,不提供互斥锁来防止非线程安全的代码。这么说来就限制了很多东西,使很多好东西不能使用。那么怎么办?不急
加上这几句函数就解决了这个问题。
不错,ISP还是挺方便的
是的,只是这个开发板没有留接口,自己焊接
对microLIB又有了更深的了解。
不错