首先来看看最简单的点亮一个灯的实验你把,实验要求点亮一个灯并隔段时间熄灭,如此一直循环: 其实实现点亮一个灯和学习51单片机时是一样的,都是把某个管脚置高电平或置低电平,只不过过程有些不一样,它把好多函数放在了库里,我们只需调用那些函数,再进行设置就可以。 程序的思路如下: 1、首先需要设置的是时钟:你将灯的管脚连在哪个端口的某个引脚上面,你就开启哪个端口的时钟,比如灯连在A端口的某个引脚,就要开启A端口的时钟。 2、其次,设置管脚: 我们需要对GPIO进行初始化设置,我们只需调用 GPIO_InitTypeDef的结构体,对每个成员进行设置,要设置的有PIN管脚的位置GPIO_Pin,还有管脚的速率GPIO_Speed,还有管脚的工作状态GPIO_Mode,最后在调用一下初始化的函数GPIO_Init, 3、然后就开始写我们的主函数:假如我想让led灯的管脚置为高电平,我只需调用GPIO_SetBits函数,它是将管脚置为高电平,若想置为低电平则调用GPIO_ResetBits函数就可以。 4、最后我们要让它一闪一灭循环当然需要延时,所以我们还需写一个延时函数,这个和51单片机一样就不用多说了,如果仅仅让一个灯亮,就不需要延时了。 上面所提到的函数里面的参数设置请参考STM32固件库手册。
STM32固件库手册 下面举个例子: 要求led灯管脚在PA.1管脚上,实现一闪一灭。 #include "stm32f10x_lib.h"//头文件void LED_Init(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开 GPIOA 时钟 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//设置led灯连在第二个管脚 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO的工作状态为推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO的速率最高输出速率 50Hz GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化 GPIOA}void Delay(vu32 nCount) //延时函数,不解释{ for(; nCount != 0; nCount--);}main(){ LED_Init(); while(1) { GPIO_SetBits(GPIOA, GPIO_Pin_1);//将 GPIO的A端口第二个管脚置为高电平,即PA.1=1; Delay(0x8ffff); GPIO_ResetBits(GPIOA, GPIO_Pin_1);//将 GPIO的 A端口第二个管脚置为低电平,即PA.1=0; Delay(0x8ffff); }}- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
好了,已经OK了,下面就可以将程序下载到开发板上面去试了,就到这里吧。
|