STM32学习笔记——库函数点亮LED

参考海创电子STM32视频。

STM32点亮LED步骤:

  1. 时钟配置
  2. 配置引脚(配置输入还是输出/确定输出模式)
  3. 让引脚输出低电平
#include "stm32f10x.h"

int main(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOC,&GPIO_InitStruct);
    
    GPIO_SetBits(GPIOC,GPIO_Pin_13);
    //GPIO_ResetBits(GPI0C,GPIO_Pin_13);
    while(1);
}

 一、 时钟配置

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); 

  1. RCC的函数什么意思?
  2. RCC函数去哪里找?
  3. 里面的两个参数值怎么填?

1. RCC函数:用来使能时钟

2.RCC函数在stm32f10x_RCC文件中

3.

  • 简介:使能或失能APB2时钟
  • 参数"RCC_APB2Periph",指定APB2时钟(可一个或多个,用'|'隔开),如下所示
  • 参数"NewState",选择使能或失能(开启时钟选择使能)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,FunctionalState NewState)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,FunctionalState NewState)

断言函数: assert_param(......)

作用是检测传递给函数的参数是否是有效的参数。

 二、 引脚配置

 

在引脚配置当中,主要完成的事情有两个:

  • 在C语言层面上完成了一些变量的赋值
  • 将这些数值写入寄存器
  1. 为什么是这3个参数?
  2. 这3个参数从哪里来?

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

如果函数参数填写的是结构体指针类型,先定义该结构体变量,在通过这个结构体变量给成员赋值,再将这个结构体变量的地址填入函数!

 三、 模块化步骤 

  1. 在USER文件夹新建文件夹LED (led.c和led.h)
  2. 打开工程,在USER下添加led.c,并进行简单程序编写
  3. 添加led.h头文件路径
  4. 编写相应的头文件和源文件
  5. 最后完成主函数,注意,要在主函数添加模块的头文件 

 如何添加头文件?

  • 在源文件led.c中,编写:#include "led.h",并进行编译。

main.c

#include "stm32f10x.h"
#include "led.h"


int main(void)
{

    LED_GPIO_Config()
    while(1)
    {
        LED_GPIO_Low();
    }
}

 led.h

#ifndef __LED_H__
#define __LED_H__

#include "stm32f10x.h"

//为了增强代码的可移植性,对变量进行宏定义
#define LED_GPIO_PIN     GPIO_Pin_13
#define LED_GPIO_PORT    GPIOC
#define LED_GPIO_CLK     RCC_APB2Periph_GPIOC

void LED_GPIO_Config(void);
void LED_GPIO_High(void);
void LED_GPIO_Low(void);
//函数声明时,括号里应填“void”,但调用时不用

#endif

led.c

#include "led.h"

void LED_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    //配置时钟
    RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);

    //配置引脚
    GPIO_InitStruct.GPIO_Pin = LED_GPIO_PIN;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(LED_GPIO_PORT,&GPIO_InitStruct);
}

void LED_GPIO_High(void)
{
    //输出高电平
    GPIO_SetBits(LED_GPIO_PORT,LED_GPIO_PIN);
}


void LED_GPIO_Low(void)
{
    //输出低电平
    GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值