参考海创电子STM32视频。
STM32点亮LED步骤:
- 时钟配置
- 配置引脚(配置输入还是输出/确定输出模式)
- 让引脚输出低电平
#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);
- RCC的函数什么意思?
- RCC函数去哪里找?
- 里面的两个参数值怎么填?
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语言层面上完成了一些变量的赋值
- 将这些数值写入寄存器
- 为什么是这3个参数?
- 这3个参数从哪里来?
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
如果函数参数填写的是结构体指针类型,先定义该结构体变量,在通过这个结构体变量给成员赋值,再将这个结构体变量的地址填入函数!
三、 模块化步骤
- 在USER文件夹新建文件夹LED (led.c和led.h)
- 打开工程,在USER下添加led.c,并进行简单程序编写
- 添加led.h头文件路径
- 编写相应的头文件和源文件
- 最后完成主函数,注意,要在主函数添加模块的头文件
如何添加头文件?
- 在源文件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);
}