STM32固件库编程-----点亮led小灯

使用STM32固件库编程驱动led灯

第一步:打开keil5,创建工程文件

在这里插入图片描述

第二步:选择自己想要的路径(温馨提示,最好不要创建在C盘里面)然后点击保存
在这里插入图片描述

第三步:因为我们是使用STM32单片机所以选择Software Packs

在这里插入图片描述

因为我们使用的是stm32F1系列的芯片所以要选择如下
在这里插入图片描述

STM32F1系列有多种芯片,所以我们可以根据自己手上的单片机型号来选择(例如我手上的是F103RCT6芯片就选下面的)
在这里插入图片描述

这下我们就创建好了我们的工程文件

在这里插入图片描述
在这里插入图片描述

创建如下五个相关模块组
在这里插入图片描述

修改组名时,我们需要点击组一次然后再间隔一秒再次点击,就可以修改组名了
在这里插入图片描述

Start:添加Libraries——>CMSIS——>startup中的启动文件
在这里插入图片描述

Cmsis: 添加Libraries——>CMSIS文件夹中的如下文件
在这里插入图片描述

Fwlib:添加Libraries——>Fwlib——>src文件夹中所有的.c文件
在这里插入图片描述

最后再User中加入以下.h文件
在这里插入图片描述

新建main.c文件

在这里插入图片描述
在这里插入图片描述

双击如图的魔术棒
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.Define添加会调用到的代码 我们得宏定义加载一下
在这里插入图片描述

代码如下

STM32F10X_HD, USE_STDPERIPH_DRIVER

添加其他文件的.h路径
在这里插入图片描述

接下来编译代码
在这里插入图片描述

没有报错,说明我们的启动文件算是完美收官

接下来开始点灯:

在野火mini板中有两路led,且都是低电平点亮,高电平熄灭,所以我们要使能我们的引脚
在这里插入图片描述

第一步:新建功能模块组,把创建的led的.c和.h文件加入到里面
在这里插入图片描述

LED.c文件

#include "stm32f10x.h"                  // Device header
#include "led.h"

void LED_Init(void)
{
    //打开控制GPIOC的时钟(APB2)
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    //配置结构体
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//引脚配置PC2
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50hz
    
    //成员初始化
        GPIO_Init(GPIOC, &GPIO_InitStructure);
}

LED.h文件

#ifndef _LED_H_
#define _LED_H_

#include "stm32f10x.h"                  // Device header

void LED_Init(void);

#endif

方式一:
下面函数都能实现led灯的点亮和熄灭

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//输出高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//输出低电平

main.c文件

#include "stm32f10x.h"                  // Device header
#include "led.h"

int main(void)
{
     LED_Init(); //LED初始化
     while(1)
     {
        GPIO_ResetBits(GPIOC, GPIO_Pin_2);     //PC2引脚输出低电平    
     }
    
}

方式二:

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//前两个为指定需要的端口
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//

代码实现

#include "stm32f10x.h"                  // Device header
#include "led.h"

int main(void)
{
        LED_Init(); //LED初始化
        while(1)
        {
        GPIO_WriteBit(GPIOC, GPIO_Pin_3,Bit_RESET);     //PC3引脚输出低电平-亮灯
        //GPIO_WriteBit(GPIOC, GPIO_Pin_3,Bit_SET);     //PC3引脚输出高电平-熄灯
        }    
}

编译文件:
无报错

下载到单片机
复位开关点亮成功
在这里插入图片描述

led小灯闪烁

首先我们需要加入delay延时函数
delay.c

#include "stm32f10x.h"

/**
  * @brief  微秒级延时
  * @param  xus 延时时长,范围:0~233015
  * @retval 无
  */
void Delay_us(uint32_t xus)
{
    SysTick->LOAD = 72 * xus;                //设置定时器重装值
    SysTick->VAL = 0x00;                    //清空当前计数值
    SysTick->CTRL = 0x00000005;                //设置时钟源为HCLK,启动定时器
    while(!(SysTick->CTRL & 0x00010000));    //等待计数到0
    SysTick->CTRL = 0x00000004;                //关闭定时器
}

/**
  * @brief  毫秒级延时
  * @param  xms 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_ms(uint32_t xms)
{
    while(xms--)
    {
        Delay_us(1000);
    }
}
 
/**
  * @brief  秒级延时
  * @param  xs 延时时长,范围:0~4294967295
  * @retval 无
  */
void Delay_s(uint32_t xs)
{
    while(xs--)
    {
        Delay_ms(1000);
    }
} 

delay.h文件:

#ifndef __DELAY_H
#define __DELAY_H

void Delay_us(uint32_t us);
void Delay_ms(uint32_t ms);
void Delay_s(uint32_t s);

#endif

main.c
#include "stm32f10x.h"                  // Device header
#include "led.h"
#include "delay.h"
int main(void)
{
    LED_Init(); //LED初始化
    while(1)
    {
        GPIO_WriteBit(GPIOC, GPIO_Pin_3,Bit_RESET);     //PC3引脚输出高电平
        Delay_ms(1000);
        GPIO_WriteBit(GPIOC, GPIO_Pin_3,Bit_SET);     //PC3引脚输出低电平
        Delay_ms(1000);
    }
    
}

编译下载复位单片机led进行1s为周期的闪烁-------实验成功!!!

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值