led灯调试记录
- 配置GPIO 端口
根据原理图选择正确的GPIO管脚;
其中P10, P11分别为红灯、绿灯的控制管脚 - 配置GPIO管脚
1)
`typedef struct //GPIO输入输出口变量定义
{
GPIO_TypeDef* GPIOx;
uint32_t GPIO_Pin;
}TGPIO;
2)`
TGPIO PIN_GREEN = {GPIOD,GPIO_Pin_11}; //红绿灯管脚定义
TGPIO PIN_RED = {GPIOD,GPIO_Pin_10};
3)
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //定义一个GPIO_InitTypeDef类型的结构体
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD); //开启GPIOD的外设时钟
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //设置引脚模式为通用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置引脚速率50MHZ
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不上拉,也不下拉
GPIO_InitStructure.GPIO_Pin= PIN_GREEN.GPIO_Pin|PIN_RED.GPIO_Pin;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //设置为输出管脚
GPIO_Init(GPIOD, &GPIO_InitStructure); //调用库函数,初始化GPIOD
}
配置GPIO的时候要先定义一个GPIO结构体,再给结构体内的成员赋值。
其相关值都是设定好的,我们只需要配置和使用,配置完成即可调用
- 定义GPIO口的输出
根据原理图,确认端口输出低电平时,灯亮;反之则灯灭;
因此调用STM官方库的引脚电流拉高/拉低函数,有如下定义
#define GREEN_ON (GPIO_ResetBits(PIN_GREEN.GPIOx,PIN_GREEN.GPIO_Pin))
#define GREEN_OFF (GPIO_SetBits(PIN_GREEN.GPIOx,PIN_GREEN.GPIO_Pin))
#define RED_ON (GPIO_ResetBits(PIN_RED.GPIOx,PIN_RED.GPIO_Pin))
#define RED_OFF (GPIO_SetBits(PIN_RED.GPIOx,PIN_RED.GPIO_Pin))
- .定义LEDFLASH函数
void LedFlash()
{ static BYTE i=0;
if(i%4<2){ //正常模式,红绿灯交替慢闪0.5s
GREEN_ON;
RED_OFF;
}
else{
RED_ON;
GREEN_OFF;
}
i++;
}
- 将LEDFLASH装载入任务循环队列
SetCycleTask( LedFlash,NULL,0,250,TASK_SUSPEND,PriorityLevel(1)); //循环周期为250ms, //优先级为1