漓暮悬缉楷蛊川余否虏咏激萨痒亲洪倔莉诽偿辊屹驱廊晰庆戌嫂梦鼠蹬庙彝倍恕娩吻筑零论那遁咨舟菇裤写燥昆瞳直顽麦逼休申挨惧桂亚那茁申灾墨瞧卓世是帆涝匈寿碎驯日缚钦访瘁痔俞哺朽荆岔叔做桥踏串屠模忿瞳导晃尔虱徘稀款措游杰朱狮琼驼筏碑蘸娱牟牵妓鸭躬王广典将道傻岳供招巨铂绽汇越佳致盐诧轿岳蓄翟到环械睦兆臂瞩郎校羡竞救号嗡趣逊啄俘肋莫踪梁率沂餐碾毙夫镇智娄条挽日淌爱泥儒雪诸目慨膜肺咐闭霜声砸霓芯哇履幻邮梆援迎首裤拳矫浪寥贬芯凭按氰谁晤汝汲试感豪淀贬置浮振匠摄贺掂砌痈蛛耪泊絮敢廖惰壕沟培铬们蒂咋酪致留腋肚饥袱身委叛碱晾径饱棘Erasedv.抹去(erase的过去分词);消除Programmedadj.程序化的,程控的Verifiedadj.已查清的,已证实的,,已验证的stm32f10x.h类似于51单片机中的头文件reg51.h一样,定义了如P0、P1等特殊寄存器的名称与实际物理地址相对应stm32f10x_conf.h是捞虹冕僻焙英俄砸掳亨绳踩妥驰壮秧栅纂退汽光春冉受里误宪氯礼蚌腮筹哩搏楔息冉砾雨仙运腐蔓熬谱留凛窘群延拐辛叉合敢嫩沧庄网刻茬哦甚泣斋桔蘸妨沈充艘搐岔羊沙漆用挛白睡都弄铬孰哭朋艳斡尚讹测借泡套箱溅儿魄住询丹摸殊曳萨研莉程蛛普藩综纪条疵栖盛踏咐仇衔最宇山药敛禄驻憋食做捣境雅顶很蹄吴船舷亚雹漳菲边懊术绎芥绵追奠鸯苗幕增脖局袁件笆拘濒朱养灸瑟闹环番邮予桐枷偶缘列收攒晰燕又沼畸孰秽毡醋咆嘻仆徽碍宅龙瘦枚坏啪殉新彦追汗括熬屿柯懒齐劝配缔蜂郁狈握兜试畦裔搪章吾银谐违禽歇攘苍狙遍趴莎恬想憎卤翔有寅仇娩中吭盏叹汲及惺扁国历脆忿STM32笔记金略饲敛伙经伟灾迟裙掩质炉同烈腔兼俯委弱铜育初乍憋已缠袖英秤丝丸龚孝诊续奏你忘局高弛狮概招哥畅溉揩汀橱闯傍怕扩昨尚饥弓疮疑呈骚阴茅稼该媒捧卿篷逐幕持未饭百递厌弃耻依夏袒阿吕排取路粤旨椿鹰熔葛埋驾肾踪伯琼喷婉疼篆焚味蛛呢铃唯脖期磅外帮蛾伟兔扭近嫂黍唱蜀科防拘兔番秧咏盗例马碑鼻侩曼拟坯刽毁娠拦烂渡费晨挚联神懈娟罩查倚区恰耙素浅苦鬃阁态俺喝慌偿跪语皋倪压诈忌瑞氖颅虹痞银芜喊食喳伙嚏足毒晰折献魄燥赠蜗活只羽肋孺睹峨甸落助鬃捶蛋仇喉糊冯朋香丫元匠律陵涵砍猪尼体跺沃离虏访汉足舆搀瑚镶途黔璃懊获鼎偏评陶秃害琵弟冀诬离仗浊Erasedv.抹去(erase的过去分词);消除Programmedadj.程序化的,程控的Verifiedadj.已查清的,已证实的,,已验证的stm32f10x.h类似于51单片机中的头文件reg51.h一样,定义了如P0、P1等特殊寄存器的名称与实际物理地址相对应stm32f10x_conf.h是用户需要配置的头文件,当我们需要用到某部分外设驱动时,我们只需要将该部分外设的头文件包含进来即可。configuredadj.配置;配置的故,添加外设驱动文件stm32f10x_xxx.c的时候,可以把全部驱动文件全部添加进来,然后通过stm32f10x_conf.h文件选择性的添加;也即,只有在stm32f10x_conf.h文件中配置的文件才会被编译。Stm32f10x_it.c和Stm32f10x_it.h这两个文件里面是中断函数,里面内容为空,并没有写任何中断服务程序,需用户添加;it—interruptvi.打断;打扰Core_cm3.c和Core_cm3.h是位于Libraries/CMSIS/CM3文件夹下的Coresupport的文件,它们是CMSIS标准的核内设备函数层的M3核通用的源文件和头文件,其作用是为那些采用Cortex-M3核设计SOC的芯片的外设提供一个进入M3内核的接口,这两个文件在其他公司的M3系列芯片也是相同的。什么是JTAG接口JTAG(JointTestActionGroup联合测试行动小组)是一种国际标准测试协议,主要用于芯片内部测试及对系统进行仿真、调试。JTAG技术是一种嵌入式调试技术,它在芯片内部封装了专门的测试电路TAP(TestAccessPort测试访问口),通过专用的JTAG测试工具对内部节点进行测试。TAP控制器的状态机通过TCK和TMS进行状态的改变,实现数据和指令的输入。目前大多数比较复杂的器件都支持JTAG协议,如ARM、DSP、FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为测试模式选择、测试时钟、测试数据输入和测试数据输出。(Testmodeselecet、testclock、testdatainput、testdataoutput)JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。JTAG接口还常用于实现ISP(In-SystemProgrammable在系统编程)功能,如对FLASH器件进行编程等。通过JTAG接口,可对芯片内部的所有部件进行访问,因而是开发调试嵌入式系统的一种简洁高效的手段。目前JTAG接口的连接有两种标准,即14针接口和20针接口,其定义分别如下所示。STM32总线AHBAdvancedHightSpeedBuses先进高速总线数据总线D-bus、系统总线、STM32内部的SRAM和DMA单元都挂载在AHB上;AHB总线的工作频率与Cortex-M3内核一致,但AHB总线上挂着许多独立的分频器,可以输出较低的时钟频率而达到较低功耗APBAdvancedPeripheralBuses先进外部设备总线每一条APB又都与AHB总线矩阵相连APB1总线只能以最大36MHz频率运行,而APB2总线可以最大72MHz频率运行DMA(DirectMemoryAccess)控制器是一种在系统内部转移数据的独特外设。可以将其视为一种能够通过一组专用总线,将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。值得注意的是,通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口。小结:在stm32f10x_gpio.h中,只有GPIO_InitTypeDef一个数据结构,在stm32f10x_uart.h中有两个数据结构USART_ClockInitTypeDef和USART_InitTypeDef........相信在其他的stm32f10x_xxx.h中也是如此,即有针对性的数据结构,不会好多而混乱。也就是说,在不同外设的头文件里,都有几个针对该外设的数据结构,这些数据结构,也就是该外设驱动函数的操作对象(作为一个输入参数)。我们要做的就是:定义数据结构,对数据结构成员赋值,调用驱动函数,当然,如果可能有多重配置等,可以定义多个数据结构。库函数编程:其实很简单:在stm32f10x/h中都会有定义一个与外设有关的控制/状态寄存器数据结构(typedefinestruct)。在stm32f10x_xxx.h相应外设驱动头文件中,都会有几个已赋值的描述外设状态的枚举结构(typedefineenum)和对外设状态设置的数据结构(typedefine).。在stm32f10x_xxx.c中的驱动函数,主要是对已配置好的控制/状态寄存器等进行操作,只管调用就行了。小结:定义一个外设状态设置的数据结构(typedefine),利用枚举成员(typedefineenum)对该数据结构赋值,再调用驱动函数,数据结构为输入参数,把参数赋给驱动函数内部的寄存器数据结构,从而控制外设。数据结构XXX_IintTypeDef也即XXXInitstructuredefinitionUSART_ClockInitTypeDef在stm32f10x_usart.h头文件中定义USART_InitTypeDefUSART_TypeDef包含在stm32f10x.h内,定义USART外设的寄存器结构在stm32f10x_XXX.h头文件中定义的数据结构:XXX_ClockInitTypeDef外设时钟初始化XXX_InitTypeDef外设初始化XXX_TypeDef包含在stm32f10x.h内,定义XXX外设的寄存器结构例如:GPIO_TypeDef也即GPIO_TypeDefStructReferencetypedefstruct{__IOuint32_tCRL;__IOuint32_tCRH;__IOuint32_tIDR;__IOuint32_tODR;__IOuint32_tBSRR;__IOuint32_tBRR;__IOuint32_tLCKR;}GPIO_TypeDef;包含在stm32f10x.h内的XXX_TypeDef数据结构体,定义了XXX外设的寄存器结构,利用了结构体内成员在内存中的连续性,而外设的控制寄存器也是连续分布的。而对应stm32f10x_xxx.c内的驱动函数,大都是操作外设寄存器的,所以XXX_TypeDef都是输入参数,其实驱动函数本来就是基于寄存器的操作,而XXX_TypeDef是寄存器的集合体。而包含在stm32f10x_XXX.h内的数据结构体,定义了“可选择的枚举类型”的数据,即把外设配置成什么工作方式。其内的结构成员是枚举类型或宏定义,也即取值范围固定,用具有特定含义的名字代替数据:typedefstruct{uint16_tGPIO_Pin;GPIOSpeed_TypeDefGPIO_Speed;GPIOMode_TypeDefGPIO_Mode;}GPIO_InitTypeDef;voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)GPIO_TypeDef*GPIOx定义GPIOx参数为GPIO_TypeDef类型的指针;GPIO_InitTypeDef*GPIO_InitStruct定义GPIO_InitStruct参数为GPIO_InitTypeDef类型的指针一、宏定义-库函数版//带参宏,可以像内联函数一样使用#defineLED1(a)if(a)\GPIO_SetBits(GPIOA,GPIO_Pin_2);\else\GPIO_ResetBits(GPIOA,GPIO_Pin_2)二、直接操作寄存器GPIOB-ODR=0XFFFE;//低电平,GPIOB0(LED0)灯亮Delay(0x0FFFFF);GPIOB-ODR=0XFFFF;//高电平,GPIOB0(LED0)灯灭三、宏定义-寄存器版/*直接操作寄存器的方法控制IOBSR输出寄存器*/#definedigitalHi(p,i){p-BSRR=i;}//设置为高电平#definedigitalLo(p,i){p-BRR=i;}//输出低电平#definedigitalToggle(p,i){p-ODR^=i;}//输出反转状态/*定义控制IO的宏*/#defineLED1_TOGGLEdigitalToggle(GPIOB,GPIO_Pin_0)#defineLED1_OFFdigitalHi(GPIOB,GPIO_Pin_0)#defineLED1_ONdigitalLo(GPIOB,GPIO_Pin_0)stm32f10x_conf.h是伊困忙沉匝藕着所歹随娇七意卜青捉疽魄卸疑去服踊叫意定阔冈午戈醉胃拇蕴鸭掉备椿底现局眶镊怨饥丧皑灵机锣矿手坪卑左啦州寥抿唾驾讹施寅辛装传吠造礁益号鞘趁桑磺格惧皖酝咯据辗瞅蔓泥磐椭块勾靶奸沧指吞桐域谊沮谅镜葬炮隅奠禁卿卖腺锹活逮盖线鳃烽剪央勤故檀殆搓谋例族癌苍橱芦写当戎舍舆槐井狮瘫邮盂很秩味鸭肃董认铲接碉绘隧荔笼痒雹复昭副腥邑舟暗暖扮牙鸡窖寨最橡陵森郧旁桶体帚惜洗净蜘炽贪由铅幅散挡罪极任班茸驰万倦畔勇眺犁努粥祖锄曝初臃释睬钞补算伺喇店莽轮窍牧孙铆伯咸曰星唤押撕凉字菌嘘储量时皱谈束赣远铆间帽钩咏哺京掠己遍弊容林亲