您的位置 首页 资料

stm32学习之三

1、GPIO之LED灯的点亮程序:GPIO的功能是多样的,驱动LED灯,获得按键的输入信息……。对于驱动LED灯,按照上面就需要对GPIO进行配置。基…

1、GPIOLED灯的点亮程序:

GPIO的功用是多样的,驱动LED灯,取得按键的输入信息……。

关于驱动LED灯,依照上面就需求对GPIO进行装备。

基本知识把握:

2013年4月24日:
下午:
stm32学习的原因:
1、从内核上:一般人开端学习的时分,都是从arm7开端的,可是自从stm32开发板呈现后,就发现了人们更多的在
运用了stm32了。
2、从用途上:stm32微操控器工业操控上、消费电子、手持设备、轿车电子、安防监控等很多范畴得到广泛的
运用,并且其高性价比,合适手艺DIY的长处。

arm7与stm32的比较:
Cortext-32的速度比arm7块三分之一,功耗低四分之一,并且可以完成更小芯片面积,利于将更多功用整合在更小的
芯片尺寸中。cortex-m3处理器结合了履行Thumb-2指令的32为哈佛微体系结构和体系外设,包含Nested Vec-tored interrupt
Controller和Arbiter总线。、
在工控范畴,用户要求具有更快的中止速度,cortex-m3采用了Tail-Chaining中止技能,彻底根据硬件进行中止处理,
最多可削减12个时钟周期数,在实践运用中可削减百分之七十的中止数目。

了解AVR:
AVR可以说是一款很成功的一款芯片,功耗低,功用强。较之前的51,功用提高了好几个层次。AVR的外设很丰厚,一般的
项目都能满意。
可是自从STM32呈现之后,AVR就”退出江湖了”。
因为它跟stm32是无法比的。

3、运用方便:
1、支撑串口下载
2、一切的IO端口都可以发生中止
3、技能资料多
4、支撑SWD下载
5、复用IO口重映射功用

留意:
编译软件:
1、MDK仍是IAR?
一般的都是运用的MDK
2、固件库仍是寄存器?
一般的都要用,都要学。

IAR占的编译代码速度,占的flash等等都是比MDK好,可是都不是很大。
可是一般都不必IAR
可是:
keil(被ARM收买了):
1、界面友爱
2、装备简略
3、操作简略

stm32最小体系(能使单片机作业的体系):
1、电源
2、复位
3、时钟
4、下载电路(很多人都以为这个不属于最小体系,可是完好的仍是加上的)

主要是留意一个是时钟。
留意时钟的分配,来历,几路走出等。

1、体系时钟的初始化函数。
2、延时函数的完成。
软件延时是比较简略的办法,它使用CPU履行一循环句子来发生延时的作用。
关于stm32来说,履行一条指令只要几十个ns,进行for循环,要完成N毫秒的x值十分大,并且因为体系的频率的
广大,很难计算出延时N毫秒的准确值。
软件延时不占用定时器资源,但占用CPU资源,它的延时精度不高,合适运用在对延时精度不高的场合。

十分要留意的是:

GPIO的装备,很重要的一方面便是时钟的给予,没有时钟,就算一切都装备好了,也是白费的。

程序:

LED的头文件的相关信息:

#ifndef _LED_H
#define _LED_H
#include “stm32f10x.h”

#define ON 1
#define OFF 0

#define LED1(a) if (a)\
GPIO_ResetBits(GPIOC,GPIO_Pin_3);\
else\
GPIO_SetBits(GPIOC,GPIO_Pin_3)
#define LED2(a) if (a)\
GPIO_ResetBits(GPIOC,GPIO_Pin_4);\
else\
GPIO_SetBits(GPIOC,GPIO_Pin_4)
#define LED3(a) if (a)\
GPIO_ResetBits(GPIOC,GPIO_Pin_5);\
else\
GPIO_SetBits(GPIOC,GPIO_Pin_5)
void LED_GPIO_Config(void);

#endif
这里有一个很重要的define,关于这次的程序来说,是十分小的,用到的不多的话,一般不必这样界说的。但一起也要看到这个程序的界说

的技巧性。

然后写上led.c的相关GPIO装备信息,

#include “led.h”
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&GPIO_InitStructure);

GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
}
再个便是主程序的调用问题:

/******************** (C) COPYRIGHT 2013**************************
* 文件名 :main.c
* 描绘 :用3.5.0版别建的工程模板。
* 试验渠道:野火STM32开发板应该是STM32F103VET6
* 库版别 :ST3.5.0
*
* 作者 :wit_yuan
* 版别 : v1.0
* 时刻 : 2013年4月27日
**********************************************************************************/
#include “stm32f10x.h”
#include “led.h”
void delay(__IO uint32_t time);
/*
* 函数名:main
* 描绘 : 主函数
* 输入 :无
* 输出 : 无
*/
int main(void)
{
LED_GPIO_Config();
LED1(ON);
delay(0x0FFFFFFF);
LED1(OFF);
}
void delay(__IO uint32_t time)
{
for(;time>0;time–);
}

需求留意的是,时钟给予的是72MHZ,那么这个程序延时的话,应该是30多秒。成果证明也是差不多时刻。

留意:

因为用到了时钟的相关装备,因而需求加上头文件的。

#include “stm32f10x_rcc.h”

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/252307.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部