stm32初学例程
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
gpio.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);
在成功搭建开发环境之后,我们就可以对STM32进行深入的学习了,STM32功能繁多,不可以一下子学习所有的知识,因此采用各个击破,由简转难的学习方法,一步步的学会STM32的功能。
总之,我们需要调通每一个经常使用到的功能。而本篇文章就是记录了调通某些功能的历程,以及在调试过程中可能会出现的问题。
由于自身能力的限制,对有些知识点可能理解的不是很透彻,因此错误难免,希望谅解并给出指导建议。您可以通过kongst@联系我,谢谢。
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
}
如此而已;这是最简单的实验,可以为此建立一个拥有自己特色的工程模板;
1.3
A、硬件必须首先确保正确;
B、开发环境搭建确保正确;
C、系统时钟的选择要清楚;仿真所处的区域要清楚;
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);
For other uses, indicate the source, to express my recognition of the results.
Thank you.
Introduction
由于公司需要,以及充满对arm的向往,开始学习STM32.。
与8位单片机不同,32位处理器的开发变得更加复杂,同时也伴随着性能和功能的显著提高。由于初学STM32,遇到了很多莫名其妙的问题,但是总归是在自己的摸索中一个个的解决了。
TIM_DeInit(TIM2);//设置Time2相关;
time2.TIM_Prescaler = 0;
time2.TIM_CounterMode = TIM_CounterMode_Up;
time2.TIM_Period = 1000;
time2.TIM_ClockDivision = TIM_CKD_DIV1;
//以下是本实验增加的部分;
//Time2配置
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB2Periph_AFIO,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置Time2中断向量相关;
SystemInit();
#ifdef VECT_TAB_RAM
// Set the Vector Table base location at 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
在使用固件库时,需要自己有点C语言的相关基础,如结构体、枚举、指针等;
1 GPIO Test(
GPIO实验是最简单,也是一般最先开始的一个实验,他可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。建议,当该实验顺利完成后,作为一个模板,供以后实验使用,确保您可以将精力花费在需要实现的功能上。
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, );//启动Time2;
while(1)
{
}
}
关于系统外设时钟的选择,可以参见相关手册,这是一个比较复杂的关系,这里给个简单的图:(由红色框图中得知,Time2采用的是APB1之后的时钟系统)
此文章所采用的开发环境如下
A、开发板、仿真器:使用的是STM32F103C8-PKT+ST-LINK;
B、开发环境:IAR Embedded Workbench for ARM 6.10 Kick start;
C、Firmware:STM32F10x_StdPeriph_Lib_V3.4.0
首先安装IAR Embedded Workbench for ARM, 32K Kick start Edition;
本实验需要实现:使用Time2进行定时的功能,使得LED灯进行相应时间的闪烁。
2
在Time2上,主要是芯片内部实现,所以Time2无需关注硬件;
操作的LED,我们需要实现与PB12引脚相连的LED的亮灭;
2
#include "stm32f10x.h"
#include "main.h"
//#include "k_gpio.h"//已经转移到main函数中;
#ifdef VECT_TAB_RAM//设置仿真调试区域,这里设置成在RAM中;
// Set the Vector Table base location at 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
如此,GPIOB连接LED的四个端口都配置好了;
1.2.
While(1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
//配置端口,开始时,不需要知道所有的细节,从字面上理解就ok;
gpio.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;
// Set the Vector Table base location at 0x08000000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
1.2.
//首先,选择GPIOB外设时钟;只有选择好时钟后,才可以进行下面的配置;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
nvic.NVIC_IRQChannel = TIM2_IRQn;
//nvic.NVIC_IRQChannelPreemptionPriority = 0;
nvic.NVIC_IRQChannelSubPriority = 1;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);
//#include "k_time2.h"//本实验增加部分,但已经转移到main函数中;
#defineVECT_TAB_RAM
void main()
{
GPIO_InitTypeDef gpio;
TIM_TimeBaseInitTypeDeftime2;//本实验增加部分
NVIC_InitTypeDefnvic;//本实验增加部分
1.
#include "stm32f10x.h"
#include "main.h"
//#include "k_gpio.h"//已经转移到main函数中;
#defineVECT_TAB_RAM//选择在RAM中调试;
//main()函数:
1.2.
SystemInit(); //选择系统运行时钟,默认是72MHz,可以调试跟踪进行修改;
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
D、外设时钟的配置是第一位的,其他配置都在其后;
2
Timer作为控制器和处理器的一个重要的组成部分,是几乎所有系统都需要的一个模块,可以提高程序的实时性、精确性,以及安全性,是最为重要的一个学习方面;
STM32有着丰富的Time系统,很容易使初次接触的人产生恐惧,不过,归咎起来,他的作用也只是定时和计数,只不过衍生的功能比较强大,有PWM,比较捕获,强制输出等,其实不需要所有的功能都掌握,您只需要用到什么功能再去学习某个功能即可;
stm32有着丰富的time系统很容易使初次接触的人产生恐惧不过归咎起来他的作用也只是定时和计数只不过衍生的功能比较强大有pwm比较捕获强制输出等其实不需要所有的功能都掌握您只需要用到什么功能再去学习某个功能即可
<2011-1-6>
<Kongst>
kongst@
<
If an error, please contactauthor, to be corrected.
// Set the Vector Table base location at 0x08000000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
//GPIOB端口配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
Delay(0xffffff);
Delay(0xffffff);
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
下载STM32F10x_StdPeriph_Lib_V3.4.0;
购买一块开发板,通过ST-Link进行仿真和调试;
(所有的资源都可以到IAR和ST官网上下载,资源的获取也是很重要的,要是自己不培养找资源的功夫,就不是一个好的开发人员,这里就不留网址了)
关于编译环境和仿真方法可以参考我的另一篇记录环境搭建的文章——《EWARM_STM32_Use_Instructions》。
关于环境的搭建,您可以参考《EWARM_STM32_Use_Instructions》;
本实验需要实现:四个LED的简单控制。
1.1
1.确认硬件连接:
根据开发板原理图,如图,得知:与LED相连的有PB12、PB13、PB14、PB15;
以下就是对这四个引脚的配置,及相关操作;
1.2
//main()程序开始……
GPIO_SetBits(GPIOB, GPIO_Pin_12);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
//以上已经有过详细的论述,可以参考先前的Test;
//TIM_TimeBaseStructure.TIM_RepetitionCounter
TIM_TimeBaseInit(TIM2, &time2);
TIM_PrescalerConfig(TIM2, 0x8c9F, TIM_PSCReloadMode_Immediate);
TIM_ARRPreloadConfig(TIM2, DISABLE);
说来惭愧,三个星期天天忙STM32,总算实现了几个常用的功能,心中窃喜——arm也不过如此嘛!
当然,STM32许多过人之处还没有细细研究,巧妙设计之处还没有完全的感受到,暂且就当是小小的步入STM32开发初期阶段吧。
为了纪念STM32学习过程的辛劳和无助,记下我的学习过程,与大家共勉。也希望能为广大的初学者提供小小的帮助。如有任何问题和建议,您可以联系kongst@。
gpio.GPIO_Speed = GPIO_Speed_50MHz;
gpio.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &gpio);
在成功搭建开发环境之后,我们就可以对STM32进行深入的学习了,STM32功能繁多,不可以一下子学习所有的知识,因此采用各个击破,由简转难的学习方法,一步步的学会STM32的功能。
总之,我们需要调通每一个经常使用到的功能。而本篇文章就是记录了调通某些功能的历程,以及在调试过程中可能会出现的问题。
由于自身能力的限制,对有些知识点可能理解的不是很透彻,因此错误难免,希望谅解并给出指导建议。您可以通过kongst@联系我,谢谢。
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
}
如此而已;这是最简单的实验,可以为此建立一个拥有自己特色的工程模板;
1.3
A、硬件必须首先确保正确;
B、开发环境搭建确保正确;
C、系统时钟的选择要清楚;仿真所处的区域要清楚;
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);
For other uses, indicate the source, to express my recognition of the results.
Thank you.
Introduction
由于公司需要,以及充满对arm的向往,开始学习STM32.。
与8位单片机不同,32位处理器的开发变得更加复杂,同时也伴随着性能和功能的显著提高。由于初学STM32,遇到了很多莫名其妙的问题,但是总归是在自己的摸索中一个个的解决了。
TIM_DeInit(TIM2);//设置Time2相关;
time2.TIM_Prescaler = 0;
time2.TIM_CounterMode = TIM_CounterMode_Up;
time2.TIM_Period = 1000;
time2.TIM_ClockDivision = TIM_CKD_DIV1;
//以下是本实验增加的部分;
//Time2配置
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB2Periph_AFIO,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//设置Time2中断向量相关;
SystemInit();
#ifdef VECT_TAB_RAM
// Set the Vector Table base location at 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
在使用固件库时,需要自己有点C语言的相关基础,如结构体、枚举、指针等;
1 GPIO Test(
GPIO实验是最简单,也是一般最先开始的一个实验,他可以搭建一个最小的工程项目,之后,所有的实验都可以建立在该项目之上,从而节省了在搭建过程中所消耗的时间和精力。建议,当该实验顺利完成后,作为一个模板,供以后实验使用,确保您可以将精力花费在需要实现的功能上。
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
TIM_Cmd(TIM2, );//启动Time2;
while(1)
{
}
}
关于系统外设时钟的选择,可以参见相关手册,这是一个比较复杂的关系,这里给个简单的图:(由红色框图中得知,Time2采用的是APB1之后的时钟系统)
此文章所采用的开发环境如下
A、开发板、仿真器:使用的是STM32F103C8-PKT+ST-LINK;
B、开发环境:IAR Embedded Workbench for ARM 6.10 Kick start;
C、Firmware:STM32F10x_StdPeriph_Lib_V3.4.0
首先安装IAR Embedded Workbench for ARM, 32K Kick start Edition;
本实验需要实现:使用Time2进行定时的功能,使得LED灯进行相应时间的闪烁。
2
在Time2上,主要是芯片内部实现,所以Time2无需关注硬件;
操作的LED,我们需要实现与PB12引脚相连的LED的亮灭;
2
#include "stm32f10x.h"
#include "main.h"
//#include "k_gpio.h"//已经转移到main函数中;
#ifdef VECT_TAB_RAM//设置仿真调试区域,这里设置成在RAM中;
// Set the Vector Table base location at 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
如此,GPIOB连接LED的四个端口都配置好了;
1.2.
While(1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
//配置端口,开始时,不需要知道所有的细节,从字面上理解就ok;
gpio.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;
// Set the Vector Table base location at 0x08000000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
1.2.
//首先,选择GPIOB外设时钟;只有选择好时钟后,才可以进行下面的配置;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
nvic.NVIC_IRQChannel = TIM2_IRQn;
//nvic.NVIC_IRQChannelPreemptionPriority = 0;
nvic.NVIC_IRQChannelSubPriority = 1;
nvic.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvic);
//#include "k_time2.h"//本实验增加部分,但已经转移到main函数中;
#defineVECT_TAB_RAM
void main()
{
GPIO_InitTypeDef gpio;
TIM_TimeBaseInitTypeDeftime2;//本实验增加部分
NVIC_InitTypeDefnvic;//本实验增加部分
1.
#include "stm32f10x.h"
#include "main.h"
//#include "k_gpio.h"//已经转移到main函数中;
#defineVECT_TAB_RAM//选择在RAM中调试;
//main()函数:
1.2.
SystemInit(); //选择系统运行时钟,默认是72MHz,可以调试跟踪进行修改;
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
D、外设时钟的配置是第一位的,其他配置都在其后;
2
Timer作为控制器和处理器的一个重要的组成部分,是几乎所有系统都需要的一个模块,可以提高程序的实时性、精确性,以及安全性,是最为重要的一个学习方面;
STM32有着丰富的Time系统,很容易使初次接触的人产生恐惧,不过,归咎起来,他的作用也只是定时和计数,只不过衍生的功能比较强大,有PWM,比较捕获,强制输出等,其实不需要所有的功能都掌握,您只需要用到什么功能再去学习某个功能即可;
stm32有着丰富的time系统很容易使初次接触的人产生恐惧不过归咎起来他的作用也只是定时和计数只不过衍生的功能比较强大有pwm比较捕获强制输出等其实不需要所有的功能都掌握您只需要用到什么功能再去学习某个功能即可
<2011-1-6>
<Kongst>
kongst@
<
If an error, please contactauthor, to be corrected.
// Set the Vector Table base location at 0x08000000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
//GPIOB端口配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
Delay(0xffffff);
GPIO_ResetBits(GPIOB, GPIO_Pin_15);
Delay(0xffffff);
Delay(0xffffff);
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_12);
Delay(0xffffff);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
下载STM32F10x_StdPeriph_Lib_V3.4.0;
购买一块开发板,通过ST-Link进行仿真和调试;
(所有的资源都可以到IAR和ST官网上下载,资源的获取也是很重要的,要是自己不培养找资源的功夫,就不是一个好的开发人员,这里就不留网址了)
关于编译环境和仿真方法可以参考我的另一篇记录环境搭建的文章——《EWARM_STM32_Use_Instructions》。
关于环境的搭建,您可以参考《EWARM_STM32_Use_Instructions》;
本实验需要实现:四个LED的简单控制。
1.1
1.确认硬件连接:
根据开发板原理图,如图,得知:与LED相连的有PB12、PB13、PB14、PB15;
以下就是对这四个引脚的配置,及相关操作;
1.2
//main()程序开始……
GPIO_SetBits(GPIOB, GPIO_Pin_12);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_SetBits(GPIOB, GPIO_Pin_14);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
//以上已经有过详细的论述,可以参考先前的Test;
//TIM_TimeBaseStructure.TIM_RepetitionCounter
TIM_TimeBaseInit(TIM2, &time2);
TIM_PrescalerConfig(TIM2, 0x8c9F, TIM_PSCReloadMode_Immediate);
TIM_ARRPreloadConfig(TIM2, DISABLE);
说来惭愧,三个星期天天忙STM32,总算实现了几个常用的功能,心中窃喜——arm也不过如此嘛!
当然,STM32许多过人之处还没有细细研究,巧妙设计之处还没有完全的感受到,暂且就当是小小的步入STM32开发初期阶段吧。
为了纪念STM32学习过程的辛劳和无助,记下我的学习过程,与大家共勉。也希望能为广大的初学者提供小小的帮助。如有任何问题和建议,您可以联系kongst@。