Firmware Lib下在地址: http://www.st.com/stonline/products/support/micro/files/um0427.zip Firmware Lib用户手册下载地址: http://www.st.com/stonline/products/literature/um/13475.pdf IAR环境Firmware Lib的目录在 $TOOLKIT_DIR$\arm\examples\ST\STM32F10x\FWLib\library\中 由于版本的问题,一般应用都重建一个 $PROJ_DIR$\..\..\library\中 在$TOOLKIT_DIR$\arm\examples\ST\STM32F10x\FWLib\中有3个关键的文件夹 1.$TOOLKIT_DIR$\arm\examples\ST\STM32F10x\FWLib\library\ 里面有2个重要目录 \inc \src 2.$TOOLKIT_DIR$\arm\examples\ST\STM32F10x\FWLib\project\ 我们新建工程可以用此当作模板直接拷贝修改即可 3.$TOOLKIT_DIR$\arm\examples\ST\STM32F10x\FWLib\examples\ 内部存放着我们需要的一些常用例程 它一般含有 main.c 用户主程序,它最终是在$PROJ_DIR$\..\..\project\中 readme.txt stm32f10x_conf.h 模块的配置文件 stm32f10x_it.h stm32f10x_it.c 用户中断服务程序填加文件 可以将此复制到我们自己的$PROJ_DIR$\..\..\project\中 用户的工程应该在$PROJ_DIR$\..\..\project\EWARM\下建立 它重要含有 cortexm3_macro.s 启动文件 stm32f10x_vector.c 用户向量文件 lnkarm_flash.xcl 注意它在菜单Option->linker->config->Linker command file里要填入 $PROJ_DIR$\lnkarm_flash.xcl 这样即可在出现在工程菜单Workspace->BOOT_FLASH中的Output里 注意: 要在Option->C/C++ Compiler->Defined Symbols里填写VECT_TAB_FLASH lnkarm_ram.xcl 注意它在Option->linker->config->Linker command file里要填入 $PROJ_DIR$\lnkarm_ram.xcl 这样即可在出现在Workspace->BOOT_RAM中的Output里 注意: 要在Option->C/C++ Compiler->Defined Symbols里填写VECT_TAB_RAM BOOT_FLASH,BOOT_RAM可在菜单Project->Edit Configurations里添加和删除 这样即可运行在FLASH或RAM环境中 工程选项的主要配置问题 进入此菜单的方法有3个 1. Alt+F7 2. 在菜单的Project下选择Option 3。在Workspace右键选择Option 临时填加stm32f10x_conf.h内没有配置的选项 在Option->C/C++ Compiler->Defined Symbols里 填写_ADC1 等同在stm32f10x_conf.h里#define _ADC1 填写_GPIOA 等同在stm32f10x_conf.h里#define _GPIOA 关于Hex或Bin文件的生成输出问题 1.在选项栏里直接填入需要的文件 在Option->Linker->Output->Output file下选择Override default 填入:文件名.文件类型 例如: test.hex或test.bin 这种方法虽然很方便,但是可能随手点击Override default使 文本框内的文字变为:工程名.d79 2.在xcl文件里填入所需的文件类型 在BOOT_RAM下要填入lnkarm_ram.xcl文件中 在BOOT_FLASH下要填入lnkarm_flash.xcl文件中 可以直接在其文件的尾部填入 -Ointel-extended,(CODE)=.hex//输出hex文件 或 -Oraw-binary,(CODE)=.bin//输出bin文件 注意只能选择其一!!! 这种方法虽然"返古",但却是"永垂不朽"的~~~ 用户指定固件库的配置问题 1.头文件引用声明 在Option->C/C++ Compiler->reprocessor->Additional include directories 填入 $PROJ_DIR$\..\ $PROJ_DIR$\..\..\library\inc 2.库文件引用声明 在Option->Linker->Config Search paths 填入 $TOOLKIT_DIR$\LIB\ $PROJ_DIR$\..\..\library\src\ 关于C++的配置问题 1.选择C++编译器 在Option->C/C++ Compiler->Language->Language下 选择 Embedded C++ 或 Extended Embedded C++ 在Option->C/C++ Compiler->Language->Language conformance下选择 Allow IAR exensions 这样即可支持__low_level_init(),从而可是全局变量复位后不初始化为0 例如: extern "C" __root char __low_level_init (void) { stm32_Init();//抢在类析构函数和main()前初始化 return 0;//0-变量不初始化,1-变量初始化 } SystemObj System; LcdObj Lcd; int main() { return 0; } 再谈C++中变量不初始化为0的问题 在IAR中,本身就有__no_init修饰符可以阻止对变量的初始化 但是在C++中,对整个类使用__no_init修饰符将造成类不能析构 即分配类后将不能自动调用类的析构函数即类的初始化函数。 再者工控中需要很多需要初始化不变的变量用于现场参数的记忆。 而C++的类成员变量也需要此功能。 故干脆重载__low_level_init()使任何变量不初始化。 注意__low_level_init()返回0即可达到此目的!!!切记!!! 再注意__low_level_init()是在类析构函数和main()前运行的。 这样就可提前进行些系统的初始化,如__low_level_init()内的stm32_Init(); 类分配顺序问题 在C++中,分配顺序顺序极为重要!!! 因为它是在__low_level_init()后而在main()前运行的!!! 由于硬件的关系,所以运行及分配的顺序很重要 申请反了可能带来意想不到的后果!!!! 哈哈,大雪封山,先杂谈到这里,俺要继续种地了~~~ 出处:hotpower |
PWD13F60功率模块在应用时是否需要加额外的散热器
使用L476_NUCLEO板串口通信,波特率为什么到460800就收不到数据?目标为1382400
为什么Stm32F103驱动ov7670有严重的分屏现象。
签到
签到
STM32f407ZG使用STM32CubeMX创建USB应用失败
关于STM32的高精度定时器应用问题请求帮助
STM32L031X 1.65V 低压应用
L6470的应用问题,高速不转振动
MDK能否仿真App应用程序(STM32起始地址不为0x08000000)?