1、GPIO之LED灯的点亮程序:
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”