一、巧妙使用宏定义
(一)现有问题
上一节中,使用了包含有引脚、模式、速度的结构体变量的配置信息,但是移植性不强,移植后改动的地方较多,上一节代码如下:
RCC->APB2ENR|= ((1)<<3); //打开GPIO端口的时钟
/*
填写配置信息——给结构体中的成员赋值。
*/
GPIO_InitStructure_G.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure_G.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_InitStructure_G.GPIO_Speed = GPIO_Speed_50MZ;
/*
调用GPIO_Init()函数,初始化GPIO端口的性质
*/
GPIO_Init(GPIOB, &GPIO_InitStructure_G);
// GPIO_SetBits(GPIOB,GPIO_Pin_0);
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
(二) 改进
使用宏定义,将常用名称进行宏定义映射。
在
#define LED_GPIO_PIN GPIO_Pin_5
处可修改为GPIO_Pin_0
#include "stm32f10x.h"
#include "stm32f10x_GPIO.h"
#define LED_GPIO_PORT GPIOB
#define LED_GPIO_CLK_ENABLE (RCC->APB2ENR|= ((1)<<3))
#define LED_GPIO_PIN GPIO_Pin_5 //直接在此处修改
void Delay(uint32_t count)
{
for(; count != 0; count--);
}
int main(void){
LED_GPIO_CLK_ENABLE;
GPIO_InitStructure_G.GPIO_Pin = LED_GPIO_PIN;
GPIO_InitStructure_G.GPIO_Mode = GPIO_Mode_OUT_PP;
GPIO_InitStructure_G.GPIO_Speed = GPIO_Speed_50MZ;
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStructure_G);
while(1)
{
GPIO_ResetBits(LED_GPIO_PORT,LED_GPIO_PIN);
Delay(0xffff);
GPIO_SetBits(GPIOB,LED_GPIO_PIN);
Delay(0xffff);
}
}
void SystemInit(void)
{
//
}

2020年7月23日 梨梨笔记
学习视频来源,点此链接
网友评论