准备工作
- 建立一个led.c和led.h 文件
- 搞清原理图,查看如何点亮
(输出低电平点亮LED灯)
led.h
要 #include “stm32f10x.h” 包含库函数
led.c
要 #include “stm32f10x.h” 包含库函数
(一)
- 使能APB2时钟,在“stm32f10x_rcc.h”中,找到使能配置函数
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
- 在“stm32f10x_rcc.h”中,找到外设GPIOC口的宏定义
#define RCC_APB2Periph_GPIOC ((uint32_t)0x00000010)
- 查找 FunctionalState NewState 如何使用
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
- 要使时钟打开,要使能为1----ENABLE
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
(二)结构体配置
- 在“stm32f10x_gpio.h”中,找到配置的结构体函数;定义一个新的结构体
GPIO_InitTypeDef led;
- 调用结构体的成员函数,实现配置
typedef enum
{ GPIO_Mode_AIN = 0x0, //模拟输入
GPIO_Mode_IN_FLOATING = 0x04, //浮空输入
GPIO_Mode_IPD = 0x28, //下拉输入
GPIO_Mode_IPU = 0x48, //上拉输入
GPIO_Mode_Out_OD = 0x14, //开漏输出
GPIO_Mode_Out_PP = 0x10, //推挽输出
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
led.GPIO_Mode =GPIO_Mode_Out_PP;
led.GPIO_Pin =GPIO_Pin_13 ;//PC13口
led.GPIO_Speed =GPIO_Speed_10MHz;
- 对GPIO口的配置函数进行初始化
GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
前半部分的x 是指第几个IO口
后半部分 是指针指向的结构体,要使用取地址符号
GPIO_Init(GPIOC, &led);
main.c
#include "stm32f10x.h"
#include "led.h"
int main()
{
LED_demo();
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //电平拉低函数
}
}
完整代码
- main.c
#include "stm32f10x.h"
#include "led.h"
int main()
{
LED_demo();
while(1)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_13); //电平拉低函数
}
}
- led.c
#include "led.h"
#include "stm32f10x.h"
void LED_demo(void)
{
GPIO_InitTypeDef led;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
led.GPIO_Mode =GPIO_Mode_Out_PP;
led.GPIO_Pin =GPIO_Pin_13 ;
led.GPIO_Speed =GPIO_Speed_10MHz;
GPIO_Init(GPIOC, &led);
}
- led.h
#include "stm32f10x.h"
void LED_deme(void);