这应该是初学者的第一个实验吧,最简单的一个实验
主要思路就是:
①:使能IO口时钟。调用函数RCC——APB2PeriphColckCmd()
不同的IO组,调用的时钟使能函数不一样。
②:初始化IO口模式,调用函数GPIO_Init();
③:操作IO口,输出高低电平。
GPIO_SetBits();
GPIO_ReseBits();
首先:先写led.h的代码
#ifndef __LED_H
#define __LED_H
void LED_Init(void);
#endif
在写led.c的代码:
初始化led
先进入里面找到初始化函数
注:assert_param 就是检测传递给函数的参数是否是有效的参数这个作用。
我们分别进入这个函数里面,右键蓝色部分,选 go to definition....那个
选出我们需要的B,
以及
中的ENABLE
以上操作 得出使能时钟的两行代码 :
然后 去初始化IO口
我们去中找初始化函数
然后,点击进去,之后查看,
第一个是GPIOx,也就是哪一个,我们用的是B和E
第二个参数是当成一个结构体来配置一些个参数,因为需要配置传输的速度和传输方向
定义GPIO_InitTypeDef GPIO_InitStr;我们定义一下他的传输的东西,我们要选择推挽输出,那么就是
其他类似这样的操作,我们是GPIO5 我们选择Pin5
设置完成后是这样的
初始化完之后,我们设置他一开始不亮,就把他设置成高电平
GPIOE和他类似
所以,总的led.c的函数为:
#include "led.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStr;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
GPIO_InitStr.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStr);
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_InitStr.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStr.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStr.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStr);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
}
剩下的,我们来写主函数
先初始化,后设置高低电平控制它的亮灭,然后中间穿插一些延迟函数
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
int main(void)
{
LED_Init();
delay_init();
while(1)
{
GPIO_SetBits(GPIOB,GPIO_Pin_5);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(500);
}
}