再说用IAP上载程序的事,IAP是意思是在应用编程,指得是在用户在编写程序的时候设计一个自编程的功能,ISP的意思是在系统编程,一般指CPU芯片内部有芯片厂家的程序,专用于自编程,这两者都可以实现自我编程,但区别主要是IAP是最终用户自定的,但空芯片是不可以用的,而ISP是芯片厂家预定的,所以空片也可以用。所以,如果用IAP,当然可以上载程序,当然前提是你设计的IAP有这个功能。如果芯片中没有你的IAP程序,那么就不能用了。在使用STM32的固件库的时候,需要往工程中添加使用到的功能的对应源文件,比如:stm32f10x_gpioc等等,一个个添加很麻烦不说,每次在rebuild的时候都要编译这些基本不变的文件
而通过使用库则可以解决这些问题,首先只需添加一次库文件,第二Rebuild的时候只编译我们自己写的源文件
创建库的过程(IAR中):
新建一个DLib工程,把stm32f10x_xxxc这样的文件和对应头文件全部复制到工程文件夹下(不复制也可以),然后添加进去,还有core_cm3c, miscc, system_stm32f10xc, 这些都添加进去(注意:不要添加h头文件,这和KEIL是不一样的,IAR里不用添加头文件,只需要源文件里#include就行了)
s启动文件则可以根据实际需要添加,当然你也可以每种型号都分别创建一个对应的库然后在实际工程中根据不同的片子选择不同的库
添加进去后,打开工程属性设置
general option:
target属性框里选择芯片;
output属性框里的Output file里选择Library(如果新建的工程是DLib的话,这里默认已经是了);
Library Configuration属性框里的Library选项选择None; (这里注意哦)
C/C++ compile:
optimizations里可以选择优化等级
Preprocessor里,additional include directories栏里添加包含文件的路径如同一般工程一样把头文件的路径添加进去
OK,设置如上编译后,将会后成一个a文件
以上是Debug模式下生成的库文件,Release下的设置同上两者间的不同的是Debug选项中默认输出调试信息,而Release中默认没有同时时我们可以在Release中根据需要把优化等级调高一点最后,Release模式下生成的库文件小一点
和平时一样建一个工程,或者随便打开一个你自己的STM32工程然后添加库,两种方法可以添加库:
1可以直接像添加源文件一样,在工程中右键-add files,然后添加a文件
2右键属性,在Linker选项中的Library选项卡中的additional libraries:中添加而且可以在Debug属性中添加Debug模式产生的库,release中添加release模式生成的库需要注意的是不能只添加路径,文件名也要写上 比如:E:/IAR_LIB/Stm32/stm32_da
OK,这时你就可以把像stm32f10x_gpioc这样的文件从工程中Remove了
(使用库)和(不使用库手动添加stm32f10x_gpioc)之间,在实际工程中,最终生成的可执行文件的大小是一样的
最后,在实际工程中:
只需将stm32f10x_confh, stm32f10x_ith, stm32f10x_itc复制到工程文件夹,然后把stm32f10x_itc添加进工程就行了(当然,前面已经说过,无论是在ARM工程,还是库工程中,IAR都不需要添加头文件,添加了反而会编译出错,只需要源文件中#include)
另外上述三文件最好不要创建成库,因为它们在不同的工程下都是不一样的,这个就不用我说了吧:)
STM32支持JTAG和SWD两种调试方式,且默认状态下这两种调试功能都是 开启 的。
由此我们可以知道:
如果要使用JTAG调试功能,那么PB3,PB4,PA13,PA14,PA15都不能使用;
而如果我们关闭JTAG功能,但是开启SWD调试功能,那么PB3,PB4,PA15都可以当作普通IO来使用了;
ST官方35的库有提供关闭调试功能的两个接口:
执行上面语句后,PB3,PB4,PA13,PA14,PA15都可以当作普通iO来使用,此时不能通过J-Link进行调试了;
执行上面语句后,PB3,PB4,PA15都可以当作普通iO来使用,且可以通过SWD进行调试。
建议程序启动时延时3-5秒后再关闭JTAG调试模式,如此,单片机断电复位后立即点击烧写按钮也是可以进行程序烧录的。
设置启动模式为ISP模式(BOOT0=1、BOOT1=0)或设置启动模式为RAM运行模式(BOOT0=1、BOOT1=1)。
将开发板断电后重新上电,此时就因不是在用户程序模式,因此就不会执行禁用JTAG的语句,JTAG功能也就可以正常使用。
设置启动模式为ISP模式(BOOT0=1、BOOT1=0),用ISP程序将STM32的FLASH擦除,之后就可恢复JTAG功能。
如果你的仿真器支持SWD仿真模式,如IAR下用JLINK、MDK下用ULINK2。直接将仿真器的模式设为SWD模,就可以不受这个禁止JTAG功能的影响了。
不是不想帮你,这问题涉及的面太广了些,用到单片机的产品一般很少只有单片机这一块电路,都是用它做控制用的,其中很多设计模数混合的电路,如何调试不是一句两句说得清的。你可以搜一搜一般产品的研发流程
补充:
1编写程序,这个阶段使用的软件要视具体微控制器而定,
例如:51用keil
AVR用ICC
430用IAR
2程序的下载可通过ISP在线下载、编程器烧录、JTAG调试等多种方式,这些同样要视硬件而定(例如AT89S52支持ISP下载,MSP430支持JTAG调试等)。
ISP是在系统编程的意思,所谓的ISP下载是指微控制器不脱离系统板在线编程的一种方式,此方法较为方便,只需几根线即可,对于微控制器已经安装到系统板上不便拆卸的场合更为适用。
在使用编程器烧写时需要使用与该编程器相配套的上位机软件,例如EasyPRO的编程器要配套它自己的软件,这样才能与电脑正常通讯并把所需烧写的程序烧入相应的MCU或存储器。
JTAG调试器除了基本的下载程序的功能外,其重要功能在于在线仿真调试,可以在编译环境中对程序的关键位置上打断点,在寄存器观察窗口中观察各个变量的数值,对这些数据进行分析以利于快速地找到程序中问题的所在。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)