知名的咨询行业网站制作/人力资源培训
目录
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灭