使用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文件:文章来源:https://www.toymoban.com/news/detail-737876.html
#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为周期的闪烁-------实验成功!!!文章来源地址https://www.toymoban.com/news/detail-737876.html
到了这里,关于STM32固件库编程-----点亮led小灯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!