




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
这几天要移植一个在IAR下的STM32开发环境,在网上参考了一些文章,质量高的没几份,要么不够祥细,移植时遇到困难,要么最后折腾了几天,终于成功了,与大家分亨。STM32开发环境的建立 2012-12-06 chenxinxian基本参数1、软件环境:IAR for ARM 5.42、固 件 库:STM32_V3.5 下载地址:/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdperiph_lib.zip3、开 发 板:stm32F103VCT6 CPU,256K FLASH,48K RAM 安装IAR1、双击IAR安装文件,稍后出现: 选择第2项, 2、正常安装下去,直到出现: 这时打开破解软件,出现选择 ,如下图: 点击:得到 和 ,将它们输入到对应的位置,安装完。固件库V3.51、 下载固件库,解压,里面有:_htmresc:ST的 logo完全无用,不用理会。Libraries: 比较重要的文件 包含STM32的系统文件和大量头文件,也就是库文件了。 Project: 包含大量外设的例程,和各个软件版本的评估版工程模板。IAR对应的就是 EWARM 文件下的工程模板。你也可以利用这个工程模板来修改,得到你自己的工程模块,本文不用此法 。Utilities: 就是评估版的相关文件:本文也不会用到,无视既可。这四个文件,(先去掉文件的只读属性吧,相信你会的)建立项目文件夹1、安照一般的方法,建立工程模板先建立一些文件夹,比如工程模板要建在E盘,项目文件名为 IAR5.4_Project(文件名自己随便定),再在IAR5.4_Project建立5个文件夹,如图: Libraries:固件库文件夹,将固件库Libraries下所有文件复制到这。Project:用来放IAR项目文件。User:用户文件,就是自己编写的文件。Documents:说明文件,要有良好的习惯,将一些要说明的东东写成TXT文件放到这。Systems:用来放与系统有关的文件,以便管理,其实不放在这也行的。2、 将以下文件放入 Systems 文件夹l 内核文件 core_cm3.c core_cm3.h 在固件库 LibrariesCMSISCM3CoreSupport l 启动文件 startup_stm32f10x_hd.s 在 LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartupiarl 系统文件 stm32f10x.h system_stm32f10x.c system_stm32f10x.h 在 LibrariesCMSISCM3DeviceSupportSTSTM32F10xl 系统文件 stm32f10x_conf.h 在 ProjectSTM32F10x_StdPeriph_Templatel 内存文件 stm32f10x_flash.icf stm32f10x_flash_extsram.icf stm32f10x_nor.icf stm32f10x_ram.icf 在 ProjectSTM32F10x_StdPeriph_TemplateEWARM3、 将 main.c 放到 User 文件夹,另外 stm32f10x_it.c stm32f10x_it.h 这两文件在 LibrariesCMSISCM3DeviceSupportSTSTM32F10x里,可作为编写中断操作参考,也放在 User 文件夹下。建立项目工程1、打开IAR软件,如下图所示,建立工程,本例以STM32F103VCT6 为例。 工程文件名为Project(其它名也可),保存在 Project 目录里2、 选择芯片 鼠标右击 选择 Options 再 再 3、配置头文件路径: $PROJ_DIR$PROJ_DIR$PROJ_DIR$.$PROJ_DIR$.Systems$PROJ_DIR$.LibrariesSTM32F10x_StdPeriph_Driverinc4、芯片类型的预处理在Defined sysbols 下面,把对应芯片的相关选项填写好。以STM32F103ZC 为例,由于STM32固件的要求,必须填写两项USE_STDPERIPH_DRIVERSTM32F10X_HD特别说明:有的项目没有写 这两行,一样能运行,为什么呢?回为它采用了第二种方法。 第二种方法: 打开 Stm32f10x.h 文件,找到 70行,如图将它两边的 /* */ 去掉,如下图再找到 105 行将它两边的 /* */ 去掉,如下图这两种方法用任何一种都行,没必要两种同时用。另外,为什么用 STM32F10X_HD,上面的用红色字体到的 startup_stm32f10x_hd.s 又是什么意思呢,因为 stm32F103VCT6 CPU 的FLASH 是256K的,是大容量芯片,资料可知。startup_stm32f10x_md_vl.s- Medium-density Value line devices are STM32F100xx microcontrollers where the Flash memory density ranges between 32 and 128 Kbytes.startup_stm32f10x_md.s- Medium-density devices are STM32F101xx, STM32F102xx and STM32F103xx microcontrollers where the Flash memory density ranges between 32 and 128 Kbytes.startup_stm32f10x_hd_vl.s - High-density Value line devices are STM32F100xx microcontrollers where the Flash memory density ranges between 256 and 512 Kbytes.startup_stm32f10x_hd.s - High-density devices are STM32F101xx and STM32F103xx microcontrollers where the Flash memory density ranges between 256 and 512 Kbytes.5、配置输出文件在Output Converter 选项中,将产生输出选择上。并选择输出格式。Motoroal 是摩托罗拉格式,可以生成.MOT 文件。Intel extended 是英特尔格式。可以生成HEX 文件Binary 是二进制格式。可以生成.bin 文件6、配置仿真器在Debugger 下面可以选择多种仿真器。本例以J-Link 为例:本例采用J-Link 并且采用JTAG模式。所以必须选择对应的JTAG模式。 如果且采用SWD模式。所以必须选择对应的SWD模式。该模式下,只需要2 根线就可以仿真了。加上电源和地共4 根线。电路可以最简单。7、加载文件 在项目里加上一些文件组和文件 这是我加的:说明一下:CMSIS内核文件DOC 放一些说明文档,如版本说明等Driver_Lib固件库SRC,按需增加Start_Up启动文件。本例加载startup_stm32f10x_hd.s 这文件一定要加,不加的话,中断程序运行不了,奇怪的是,普通程序却能运行,这样一来,如果发现中断有问题,往往不会在这里找原因的,最终会折腾得够惨,本人就是这样。User 用户文件测试程序 这程序只用了main.c ,stm32f10x_it.c没用到。Main.c#include stm32f10x.hvoid RCC_Configuration(void) ErrorStatus HSEStartUpStatus; /定义外部高速晶体启动状态枚举变量 RCC_DeInit(); /复位RCC外部设备寄存器到默认值 RCC_HSEConfig(RCC_HSE_ON); /打开外部高速晶振 HSEStartUpStatus = RCC_WaitForHSEStartUp(); /等待外部高速时钟准备好 if(HSEStartUpStatus = SUCCESS) /外部高速时钟已经准别好 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); /flash操作的延时 RCC_HCLKConfig(RCC_SYSCLK_Div1); /配置AHB(HCLK)时钟等于=SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); /配置APB2(PCLK2)钟=AHB时钟 RCC_PCLK1Config(RCC_HCLK_Div2); /配置APB1(PCLK1)钟=AHB1/2时钟 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /配置PLL时钟 = 外部高速晶体时钟 * 9 = 72MHz RCC_PLLCmd(ENABLE); /使能PLL时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /等待PLL时钟就绪 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /配置系统时钟 = PLL时钟 while(RCC_GetSYSCLKSource() != 0x08) /检查PLL时钟是否作为系统时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE); /允许GPIOB、AFIO时钟void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; /定义GPIO初始化结构体 /LED输出 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE); /允许GPIOD、AFIO时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); /按键输入 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); /允许GPIOA、AFIO时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU ;GPIO_Init(GPIOA, &GPIO_InitStructure); /按键中断 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); /允许GPIOA、AFIO时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ;GPIO_Init(GPIOA, &GPIO_InitStructure);void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); /选择优先级组别 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;/选择中断通道:EXTI线0中断,因为按键连接的是PA0脚 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;/0级抢占式优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /0级副优先级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /使能引脚作为中断源 NVIC_Init(&NVIC_InitStructure); /调用NVIC_Init固件库函数进行设置void EXTI_Configuration(void) /按键外部中断程序设置 EXTI_InitTypeDef EXTI_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); EXTI_InitStructure.EXTI_Line = EXTI_Line0; /将中断映射到中断/事件源Line0 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;/中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;/设置为下降沿中断 EXTI_InitStructure.EXTI_LineCmd = ENABLE; /中断使能,即开中断 EXTI_Init(&EXTI_InitStructure); /调用EXTI_Init固件库函数,将结构体写入EXTI相关寄存器中 EXTI_ClearITPendingBit(EXTI_Line0);void delay(int sec) int a,b,c,d; for(a=0; asec; a+) for(b=0; b10000; b+) d = c; c = d; void EXTI0_IRQHandler(void) /按键外部中断程序 if(EXTI_GetITStatus(EXTI_Line0) != RESET) GPIO_ResetBits(GPIOD,GPIO_Pin_10); delay(100); GPIO_SetBits( GPIOD,GPIO_Pin_10); delay(100); GPIO_ResetBits(GPIOD,GPIO_Pin_10); delay(100); GPIO_SetBits( GPIOD,GPIO_Pin_10); delay(100); GPIO_ResetBits(GPIOD,GPIO_Pin_10); delay(100); GPIO_SetBits( GPIOD,GP
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南建业房子的施工方案
- 女神节形体活动策划方案
- 天猫运动营销方案设计
- 拆阳台施工方案怎么写
- 农安医疗建筑方案设计服务
- 减垄增地施工方案
- 城市红色建筑调色方案设计
- 榆林聚仙禄宾馆专线项目竣工报告
- 水果甜品店营销方案模板
- 教师资格证考试(高中数学)教育知识与能力专项训练试卷2025
- 2025年度情侣分手预防协议书下载中心
- 2025年高考数学试题分类汇编:立体几何试卷+解析
- 室内X射线探伤机应用项目环境影响报告表
- 新闻发布知识培训课件
- GB/T 18277-2025收费公路收费制式和收费方式
- 高一语文学法指导(绝对经典)
- 医院安全生产知识培训课件
- 包装车间基础知识培训课件
- 2025年贵州建筑中级试题及答案
- 2025年全科医师转岗培训理论必刷试题库及答案
- 古代服饰复原与租赁服务创新创业项目商业计划书
评论
0/150
提交评论