stm32初学例程.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《stm32初学例程.docx》由会员分享,可在线阅读,更多相关《stm32初学例程.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、kongstIf an error, please contact author, to be corrected.For other uses, indicate the source, to express my recognition of the result s.Thank you.Introduction由于公司需要,以及充满对arm 的向往,开始学习STM32.。与8位单片机不同,32位处理器的开发变得更加复杂,同时也伴随着性能和功能的显 著提高。由于初学 STM32, 遇到了很多莫名其妙的问题,但是总归是在自己的摸索中一个个的解决了。说来惭愧,三个星期天天忙 STM32, 总算
2、实现了几个常用的功能,心中窃喜arm也不过如此嘛!当然, STM32 许多过人之处还没有细细研究,巧妙设计之处还没有完全的感受到,暂 且就当是小小的步入STM32 开发初期阶段吧。为了纪念STM32 学习过程的辛劳和无助,记下我的学习过程,与大家共勉。也希望能 为广大的初学者提供小小的帮助。如有任何问题和建议,您可以联系kongst此文章所采用的开发环境如下A、开发板、仿真器:使用的是STM32F103C8-PKT+ST-LINK;B 、开发环境: IAR Embedded Workbench for ARM 6.10 Kick start;C 、Firmware:STM32F10x StdP
3、eriph Lib V3.4.0首先安装IAR Embedded Workbench for ARM, 32K Kick start Edition;下载STM32F10x StdPeriph Lib V3.4.0;购买一块开发板,通过ST-Link进行仿真和调试;(所有的资源都可以到IAR 和 ST 官网上下载,资源的获取也是很重要的,要是自己不 培养找资源的功夫,就不是一个好的开发人员,这里就不留网址了)关于编译环境和仿真方法可以参考我的另 一 篇记录环境搭建的文章 EWARM STM32 Use Instructions。_ _ _在成功搭建开发环境之后,我们就可以对STM32 进行深入
4、的学习了, STM32 功能繁多, 不可以一下子学习所有的知识,因此采用各个击破,由简转难的学习方法, 一步步的学会 STM32 的功能。总之,我们需要调通每一个经常使用到的功能。而本篇文章就是记录了调通某些功能的 历程,以及在调试过程中可能会出现的问题。由于自身能力的限制,对有些知识点可能理解的不是很透彻,因此错误难免,希望谅解并给出指导建议。您可以通过 kongst 联系我,谢谢。在使用固件库时,需要自己有点C 语言的相关基础,如结构体、枚举、指针等;1 GPIO Test(端口操作实验)GPIO 实验是最简单,也是一般最先开始的一个实验,他可以搭建一个最小的工程项目, 之后,所有的实验都
5、可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。 建议,当该实验顺利完成后,作为一个模板,供以后实验使用,确保您可以将精力花费在需要实现的功能上。关于环境的搭建,您可以参考EWARM STM32 Use Instructions;本实验需要实现:四个LED 的简单控制。1.1 硬件设计:1.确认硬件连接:根据开发板原理图,如图,得知:与LED 相连的有PB12、PB13、PB14、PB15;以下就是对这四个引脚的配置,及相关操作;JP3LED+3V31LD2RS1PB12LED1PB13LED2PB14LED3PB15LED41KLEDLD1REDmLD3 RELD4REDRE
6、DUSB5V1.2软件设计:/main()程序开始1.2.1 头文件:#include stm32f10x.h#include main.h/#include k gpio.h#define VECT TAB RAM_ _/main()函数:/已经转移到main 函数中;/选择在RAM 中调试;1.2.2 系统初始化SystemInit();/选择系统运行时钟,默认是72MHz, 可以调试跟踪进行修改;#ifdef VECT TAB RAM /设置仿真调试区域,这里设置成在RAM 中;/ Set the Vector Table base location at 0x20000000NVIC
7、SetVectorTable(NVIC VectTab RAM,Ox0);#else /*VECT TAB FLASH */_ _/ Set the Vector Table base location at 0x08000000NVIC SetVectorTable(NVIC VectTab FLASH,Ox0);#endif1.2.3 GPIO 配置/首先,选择GPIOB 外设时钟;只有选择好时钟后,才可以进行下面的配置;RCC APB2PeriphClockCmd(RCC APB2Periph GPIOB,ENABLE);/配置端口,开始时,不需要知道所有的细节,从字面上理解就ok;gp
8、io.GPIO Pin =GPIO Pin 12|GPIO Pin 13|GPIO Pin 14|GPIO Pin 15;gpio.GPIO Speed=GPIO Speed 50MHz;gpio.GPIO Mode =GPIO Mode Out PP;GPIO Init(GPIOB,&gpio);GPIO SetBits(GPIOB,GPIO Pin 12); /将端口拉高,灭LED 灯;GPIO SetBits(GPIOB,GPIO Pin 13);GPIO SetBits(GPIOB,GPIO Pin 14);GPIO SetBits(GPIOB,GPIO Pin 15);如此, GPI
9、OB 连接LED 的四个端口都配置好了;1.2.4 GPIO操作While(1)GPIO ResetBits(GPIOB,GPIO Pin 12);Delay(Oxffffff);GPIO ResetBits(GPIOB,GPIO Pin 13);Delay(0xffffff);GPIO ResetBits(GPIOB,GPIO Pin 14);Delay(Oxffffff)GPIO ResetBits(GPIOB,GPIO Pin 15);Delay(Oxffffff);Delay(Oxffffff);Delay(Oxffffff);GPIO SetBits(GPIOB,GPIO Pin 1
10、2);Delay(Oxffffff);GPIO SetBits(GPIOB,GPIO Pin 13);Delay(0xffffff);GPIO SetBits(GPIOB,GPIO Pin 14);Delay(Oxffffff);GPIO SetBits(GPIOB,GPIO Pin 15);Delay(Oxffffff);GPIO ResetBits(GPIOB,GPIO Pin 12);GPIO ResetBits(GPIOB,GPIO Pin 13);GPIO ResetBits(GPIOB,GPIO Pin 14);GPIO ResetBits(GPIOB,GPIO Pin 15);如
11、此而已;这是最简单的实验,可以为此建立一个拥有自己特色的工程模板;1.3 Test注意A、 硬件必须首先确保正确;B、 开发环境搭建确保正确;C、 系统时钟的选择要清楚;仿真所处的区域要清楚;D、 外设时钟的配置是第一位的,其他配置都在其后;2 Time2 Test(Time2 定时实验)Timer作为控制器和处理器的一个重要的组成部分,是几乎所有系统都需要的一个模块,可以提高程序的实时性、精确性,以及安全性,是最为重要的一个学习方面;STM32 有着丰富的Time 系统,很容易使初次接触的人产生恐惧,不过,归咎起来,他 的作用也只是定时和计数,只不过衍生的功能比较强大,有PWM, 比较捕获,
12、强制输出等,其实不需要所有的功能都掌握,您只需要用到什么功能再去学习某个功能即可;本实验需要实现:使用Time2 进行定时的功能,使得LED 灯进行相应时间的闪烁。2.1 硬件设计在Time2 上,主要是芯片内部实现,所以Time2 无需关注硬件;操作的LED, 我们需要实现与PB12 引脚相连的LED 的亮灭;2.2软件设计#include stm32f10x.h#include main.h/#include k gpio.h/#include k time2.h#define VECT TAB RAM_ _void main()/已经转移到main 函数中;/本实验增加部分,但已经转移到
13、main 函数中;GPIO InitTypeDef gpio;TIM TimeBaseInitTypeDef time2; /本实验增加部分NVIC InitTypeDef nvic; /本实验增加部分SystemInit();#ifdefVECT TAB RAM_ _/Set the Vector Table base location at 0x20000000NVIC SetVectorTable(NVIC VectTab RAM,0x0);#else /*VECT TAB FLASH */_ _/Set the Vector Table base location at 0x08000
14、000NVIC SetVectorTable(NVIC VectTab FLASH,0x0);#endif/GPIOB 端口配置RCC APB2PeriphClockCmd(RCC APB2Periph GPIOB,ENABLE);gpio.GPIO Pin =GPIO Pin l2|GPIO Pin 13|GPIO Pin 14|GPIO Pin 15;gpio.GPIO Speed =GPIO Speed 50MHz;gpio.GPIO Mode =GPIO Mode Out PP;GPIO Init(GPIOB,&gpio);GPIO SetBits(GPIOB,GPIO Pin 12)
15、;GPIO SetBits(GPIOB,GPIO Pin 13);GPIO SetBits(GPIOB,GPIO Pin 14);GPIO SetBits(GPIOB,GPIO Pin 15);/以上已经有过详细的论述,可以参考先前的Test;/以下是本实验增加的部分;/Time2配置RCC APB1PeriphClockCmd(RCC APB1Periph TIM2/RCC APB2Periph AFIO,ENABLE);NVIC PriorityGroupConfig(NVIC PriorityGroup o);nvic.NVIC IRQChannel=TIM2 IRQn;/nvic.NV
16、IC IRQChannelPreemptionPriority=0;nvic.NVIC IRQChannelSubPriority=1;nvic.NVIC IRQChannelCmd =ENABLE;NVIC Init(&nvic);TIM DeInit(TIM2);/设置Time2 中断向量相关;/设置Time2 相关;time2.TIM CounterMode =TIM CounterMode Up;time2.TIM Prescaler=0;time2.TIM ClockDivision =TIM CKD DIV1;_ _ _time2.TIM Period=1000;/TIM Time
17、BaseStructure.TIM RepetitionCounterTIM TimeBaseInit(TIM2,& time2);TIM PrescalerConfig(TIM2,Ox8c9F,TIM PSCReloadMode Immediate);TIM ARRPreloadConfig(TIM2, DISABLE);TIM ITConfig(TIM2,TIM IT Update, ENABLE);TIM Cmd(TIM2, ENABLE); /启动Time2;while(1)关于系统外设时钟的选择,可以参见相关手册,这是一个比较复杂的关系,这里给个简单的图:(由红色框图中得知, Tim
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm32 初学 例程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内