您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 嵌入式系统设计(STM32)第2讲
第2讲STM32最小系统下周一下午实验,带上笔记本电脑熟悉软件开发环境笔记本需要安装的软件有:MDK4.70aSTM32固件库V3.5JLINK驱动PL2303驱动(USB转串口驱动)mcuisp.exe(STMISP下载器)串口调试助手固件库使用手册STM32中文参考手册_V10目录2.1STM32程序设计2.1.1嵌入式C语言知识精编2.1.2嵌入式软件层次结构2.1.3FWlib(firmwarelibrary)固件库2.2STM32最小系统2.2.1电源2.2.2复位电路2.2.3时钟2.2.4下载电路2.3STM32时钟配置2.4ARMCortex-M3处理器编程环境(RealViewMDK)2.1STM32程序设计2.1.1嵌入式C语言知识精编关键字Typedef:给一个已经存在的数据类型取一个别名Const:常数Volatile:变量,随时可能发生变化的。符号参见表3-2。预处理参见表3-3。2.1.2嵌入式软件层次结构PC体系结构(图3-2)嵌入式系统体系结构(图3-3)改进的嵌入式系统体系结构(图3-4)虚拟BIOS虚拟DOS高端用户程序中的子程序2.1.3FWlib(firmwarelibrary)固件库该函数库是一个固件函数包,它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库还包括每一个外设的驱动描述和应用实例。通过使用本固件函数库,无需深入掌握细节,用户也可以轻松应用每一个外设。因此,使用本固态函数库可以大大减少用户的程序编写时间,进而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。每个器件的开发都由一个通用API(applicationprogramminginterface应用编程界面)驱动,API对该驱动程序的结构,函数和参数名称都进行了标准化。现在用的固件库版本是stm32固件库V3.5,可以网上下载。文档和库规范一、缩写缩写外设/单元GPIO通用输入/输出NVIC嵌套中断向量列表控制器EXTI外部中断事件控制器RCC复位与时钟控制器SysTick系统嘀嗒定时器TIM通用定时器USART通用同步异步接收发射端二、命名规则固态函数库遵从以下命名规则:1.PPP表示任一外设缩写,例如:ADC。2.源程序文件和头文件命名都以“stm32f10x_”作为开头,例如:stm32f10x_conf.h。3.常量仅被应用于一个文件的,定义于该文件中;被应用于多个文件的,在对应头文件中定义。所有常量都由英文字母大写书写。寄存器作为常量处理。他们的命名都由英文字母大写书写。4.外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。4.名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP5.名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit.名为PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef结构中的各种参数来定义外设的功能,例如:USART_StructInit6.名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd.7.名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:RCC_ITConfig.8.名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig.用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig.9.名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus.10.名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag.11.名为PPP_GetITStatus的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus.12.名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:I2C_ClearITPendingBit.三、编码规则变量固态函数库定义了24个变量类型,他们的类型和大小是固定的。在文件stm32f10x_type.h中我们定义了这些变量:typedefsignedlongs32;typedefsignedshorts16;typedefsignedchars8;typedefunsignedlongu32;typedefunsignedshortu16;typedefunsignedcharu8;。。。。。。布尔型在文件stm32f10x_type.h中,布尔形变量被定义如下:typedefenum{FALSE=0,TRUE=!FALSE}bool;标志位状态类型在文件stm32f10x_type.h中,定义标志位类型(FlagStatustype)的2个可能值为“设置”与“重置”(SETorRESET)。typedefenum{RESET=0,SET=!RESET}FlagStatus;功能状态类型在文件stm32f10x_type.h中,我们定义功能状态类型(FunctionalStatetype)的2个可能值为“使能”与“失能”(ENABLEorDISABLE)。typedefenum{DISABLE=0,ENABLE=!DISABLE}FunctionalState;错误状态类型在文件stm32f10x_type.h中,定义错误状态类型(ErrorStatustype)的2个可能值为“成功”与“出错”(SUCCESSorERROR)。typedefenum{ERROR=0,SUCCESS=!ERROR}ErrorStatus;外设用户可以通过指向各个外设的指针访问各外设的控制寄存器。这些指针所指向的数据结构与各个外设的控制寄存器布局一一对应。外设控制寄存器结构文件stm32f10x_map.h包含了所有外设控制寄存器的结构。例如SPI寄存器结构的声明:2.2STM32最小系统能让单片机工作的最小单元,即是最小系统。2.2.1电源STM32F103VB开发板上,可以DC5V,或者USB5V,一般用电脑USB口供电。R1:保险电阻C1、C2:滤波电容AMS1117-3.3:把5V转换成3.3V三端可调或固定电压3.3V,输出电流为1A,线路调整率:0.2%(最大)负载调整率:0.4%(最大)2.2.2复位电路STM32支持3种复位:系统复位、上电复位、备份区域复位。当以下事件中的一件发生时,产生系统复位:1.NRST管脚上的低电平(外部复位)2.窗口看门狗计数终止(WWDG复位)3.独立看门狗计数终止(IWDG复位)4.软件复位(SW复位)5.低功耗管理复位NRST当以下事件中之一发生时,产生电源复位:1.上电/掉电复位(POR/PDR复位)2.从待机模式中返回当以下事件中之一发生时,产生备份区域复位。1.软件复位,备份区域复位可由设置备份区域控制寄存器RCC_BDCR中的BDRST位产生。2.在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。2.2.3时钟树P83图4-3系统时钟(SYSCLK)的产生来源有3个:HSI,PLLCLK,HSE由SW(时钟配置寄存器RCC_BDCR的D0位和D1位)控制选择。SW[1:0]=00,HSI,内部01,HSE,外部10,PLLCLK,锁相环,倍频锁相环输入来自HSI/2或者HSE,由PLLSRC控制选择。锁相环倍频系数由PLLMUL(RCC_BDCR的D21—D18位)控制。外部时钟接4-18MHz,开发板接8MHz开发板上的外接时钟电路2.2.4下载电路开发板支持JTAG下载和串口下载JTAG下载。JLINK一端接电脑,另一端接开发板串口下载PL2303:USB转串口2.3STM32时钟配置在STM32中,有五个时钟源:HSI、HSE、LSI、LSE、PLL。①HSI是高速内部时钟,RC振荡器,频率为8MHz。②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③LSI是低速内部时钟,RC振荡器,频率为40kHz。④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。AHB(HCLK)时钟=SYSCLK=72MHzAPB2(PCLK2)时钟=AHB时钟=36MHzAPB1(PCLK1)时钟=AHB1/2时钟=72MHzADC时钟=PCLK21/4=9MHzPLL时钟=HSE*9=72MHz在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理:1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空。2)对于少于100脚的产品,有2种接法:2.1)OSC_IN和OSC_OUT分别通过10K电阻接地。此方法可提高EMC(电磁兼容)性能。2.2)分别重映射OSC_IN和OSC_OUT至PD0和PD1,再配置PD0和PD1为推挽输出并输出'0'。时钟配置是与RCC寄存器密切联系的。RCC寄存器(10个)RCC寄存器结构在文件“stm32f10x_map.h”中,RCC_TypeDef定义如下:typedefstruct{vu32CR;vu32CFGR;vu32CIR;vu32APB2RSTR;vu32APB1RSTR;vu32AHBENR;vu32APB2ENR;vu32APB1ENR;vu32BDCR;vu32CSR;}RCC_TypeDef;使用HSE时钟,程序设置时钟参数流程:RCC:1)将RCC寄存器重新设置为默认值RCC_DeInit;2)打开外部高速时钟晶振HSERCC_HSEConfig(RCC_HSE_ON);3)等待外部高速时钟晶振工作HSEStartUpStatus=RCC_WaitForHSEStartUp();4)设置AHB时钟RCC_HCLKConfig;5)设置高速AHB时钟RCC_PCLK2Config;6)设置低速AHB时钟RCC_PCLK1Config;7)设置PLLRCC_PLLConfig;8)打开PLLRCC_PLLCmd(ENABLE);9)等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)10)设置系统时钟RCC_SYSCLKConfig;11)判断是否PLL是系统时钟while(RCC_GetSYSCLKSource()!=0x08)12)打开要使用的外设时钟RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()系统时钟初始化函数的实现下面是STM32软件固件库的程序中对RCC的配置函数(使用外部8MHz晶振):voidRCC_Configuration(void){/*将外设RCC寄存器重设为缺省值*/RCC_DeInit();/*设置外部高速晶振(HSE)*/RCC_HSEConfig(RCC_HSE_ON);//RCC_HSE_ON,HSE晶振打开(ON)/*等待HSE起振*/HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus==SUCC
本文标题:嵌入式系统设计(STM32)第2讲
链接地址:https://www.777doc.com/doc-4032443 .html