寄存器操作的方法实现两个LED灯的交替闪烁

本文档详细介绍了STM32标准固件库的使用,包括stm32f10x.h头文件的作用、system_stm32f10x.c中的时钟配置、中断服务函数编写和stm32f10x_conf.h的配置管理。通过实例演示了如何使用C语言开发,如delay_ms函数和LED控制,以及在Proteus中的模拟实验。

目录

STM32标准固件库简介

代码以C语言开发

目录结构

页面配置

Proteus中仿真实现


STM32标准固件库简介

stm32f10x.h

这个头文件实现了片上外设的所以寄存器的映射,是一个非常重要的头文件,在内核中与之相对应的头文件是 core_cm3.h

system_stm32f10x.c

实现了 STM32 的时钟配置,操作的是片上 RCC 这个外设。系统在上电之后,首选先会执行由汇编编写的 启动文件,启动文件中的复位函数中调用的 SystemInit 函数就在 这个文件里面定义。调用完之后,系统的时钟就被初始化成 72M 如果后面我们需要重新配置系统时钟,我们就可以参考这个函数 重写。为了维持库的完整性,我们不会直接在这个文件里面修改 时钟配置函数。

stm32f10x_it.c

这个文件是专门用来编写中断服务函数的,在我 们修改前,这个文件已经定义了一些系统异常 ( 特殊中断 ) 的接口, 其它普通中断服务函数由我们自己添加。但是我们怎么知道这些中 断服务函的接口如何写?在学习中断和启动文件的时候会详细介 绍。

stm32f10x_conf.h

这个文件被包含进 stm32f10x.h 文件。当我们使 用固件库编程的时候,如果需要某个外设的驱动库,就需要包含该 外设的头文件: stm32f10x_ppp.h ,包含一个还好,如果是用了多外 设,就要包含多个头文件,这不仅影响代码美观也不好管理,现 我们用一个头文件 stm32f10x_conf.h 把这些外设头文件都包含在里面, 让这个配置头文件统一管理这些外设头文件,我们在应用程序中只
要包含这个配置头文件即可,我们又知道这个头文件在 stm32f10x.h的最后被包含,所以最终我们只需要包含 stm32f10x.h 这个头文件即 可,非常方便。默认情况下是所以头文件都被包含,没有被注释掉。

代码以C语言开发

delay_ms.c:
#include "stm32f10x.h" 
void delay_ms(uint32_t CntDwn) 
{ 
 for( ; CntDwn != 0; CntDwn--); 
}

delay_ms.h:

#ifndef __delay_ms_h 
#define __delay_ms_h 
#include "stm32f10x.h" 
void delay_ms(uint32_t CntDwn); 
#endif /* "__Delay_h" */ 

bsp_led.c:
#include "stm32f10x.h" 
#include "stm32f10x_gpio.h" 
#include "bsp_led.h" 
/************************************************* 
* @Initializing IOs Controlling the Leds 
* @FWLB Here is Very Similar to Chapter 04 
*************************************************/ 
void LED_GPIO_Config(void) 
{ 
 GPIO_InitTypeDef GPIO_InitStructure; 
 
 RCC_APB2PeriphClockCmd(LED1_GPIO_CLK, ENABLE); 
 GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN; 
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
 GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStructure); 
 
 RCC_APB2PeriphClockCmd(LED2_GPIO_CLK, ENABLE); 
 GPIO_InitStructure.GPIO_Pin = LED2_GPIO_PIN; 
 GPIO_Init(LED2_GPIO_PORT, &GPIO_InitStructure); 
 
 GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); 
 GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN); 
}

bsp_led.h:

#ifndef __bsp_led_h 
#define __bsp_led_h 
/* Define GPIOs' Pins, Could Modify in the Future If Schematic 
has been changed*/ 
#define LED1_GPIO_PORT GPIOB // GPIO Port B 
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB // GPIO Port CLK -- RCC's APB2ENR
#define LED1_GPIO_PIN GPIO_Pin_2 // PB2 
#define LED2_GPIO_PORT GPIOC // GPIO Port C 
#define LED2_GPIO_CLK RCC_APB2Periph_GPIOC // GPIO Port CLK -- RCC's APB2ENR
#define LED2_GPIO_PIN GPIO_Pin_2 // PC2 
/* Macro Definition to Trigger the Led, On or Off */ 
#define ON 0 
#define OFF 1 
/* Use Firmware Library to Control IO */ 
#define LED1(d) if(d) \
 GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN); \
 else \
 GPIO_ResetBits(LED1_GPIO_PORT, LED1_GPIO_PIN) 
#define LED2(d) if(d) \
 GPIO_SetBits(LED2_GPIO_PORT, LED2_GPIO_PIN); \
 else \
 GPIO_ResetBits(LED2_GPIO_PORT, LED2_GPIO_PIN) 
 
 
void LED_GPIO_Config(void); 
#endif /* __bsp_led_h */

main.c:

#include "stm32f10x.h" 
#include "bsp_led.h" 
#include "delay_ms.h" 
int main(void) 
{ 
 LED_GPIO_Config(); 
 
 while(1) 
 { 
 LED1(ON); 
 LED2(OFF); 
 delay_ms(0x1FFFFF); 
 
 LED1(OFF); 
 LED2(ON); 
 delay_ms(0x1FFFFF); 
 } 
}

目录结构

页面配置

版本选择

XX.hex文件配置

 

等等。

Proteus中仿真实现

(1) D2闪,D3灭

 

 (2) D3闪,D2灭

 

喜欢,就点个赞吧!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初尘屿风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值