[STM32F103C8T6]标准库控制LED

 

1.点亮一个LED需要先使能GPIO口所对应的APB总线上的时钟

//使能时钟
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
	uint32_t RCC_APB2Periph 	//开启所对应GPIO组的时钟
		RCC_APB2Periph_AFIO
        RCC_APB2Periph_GPIOA
        RCC_APB2Periph_GPIOB,
        RCC_APB2Periph_GPIOC, 
        RCC_APB2Periph_GPIOD, 
        RCC_APB2Periph_GPIOE,
        RCC_APB2Periph_GPIOF, 
        RCC_APB2Periph_GPIOG, 
        RCC_APB2Periph_ADC1,
        RCC_APB2Periph_ADC2, 
        RCC_APB2Periph_TIM1, 
        RCC_APB2Periph_SPI1,
        RCC_APB2Periph_TIM8, 
        RCC_APB2Periph_USART1, 
        RCC_APB2Periph_ADC3,
        RCC_APB2Periph_TIM15, 
        RCC_APB2Periph_TIM16, 
        RCC_APB2Periph_TIM17,
        RCC_APB2Periph_TIM9, 
        RCC_APB2Periph_TIM10, 
        RCC_APB2Periph_TIM11;
	FunctionalState NewState //启用时钟或者关闭时钟
		ENABLE
        DISABLE

2.初始化GPIO口

//初始化 GPIO
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

GPIO_TypeDef* GPIOx  //需要初始化的GPIO口所对应的 GPIO组

GPIO_InitTypeDef* GPIO_InitStruct  //初始化 GPIO的结构体
    GPIO_Mode//输入模式
        GPIO_Mode_IN_FLOATING = 0x04, 	//浮空输入
        GPIO_Mode_IPD = 0x28,			//下拉输入
        GPIO_Mode_IPU = 0x48,			//上拉输入
        GPIO_Mode_Out_OD = 0x14,		//开漏输出
        GPIO_Mode_Out_PP = 0x10,		//推挽输出
        GPIO_Mode_AF_OD = 0x1C,			//复用开漏输出
        GPIO_Mode_AF_PP = 0x18			//复用推挽输出   
    GPIO_Pin = GPIO_Pin_4				//需要初始化的 GPIO口
    GPIO_Speed = GPIO_Speed_50MHz;		//GPIO频率    
        GPIO_Speed_10MHz				
        GPIO_Speed_2MHz					
        GPIO_Speed_50MHz	

3.向GPIO口发送高低电平 控制LED

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); //将GOIO设置为 低电平
	GPIO_TypeDef* GPIOx			//控制的GPIO口所对应的GPIO组
	uint16_t GPIO_Pin			//控制的GPIO口
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将GOIO设置为 高电平
	GPIO_TypeDef* GPIOx			//控制的GPIO口所对应的GPIO组
    uint16_t GPIO_Pin			//控制的GPIO口

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//设置GPIO为低/高
	GPIO_TypeDef* GPIOx			//控制的GPIO口所对应的GPIO组
    BitAction BitVal
        Bit_RESET: to clear the port pin //设为低电平
       	Bit_SET: to set the port pin	//设为高电平

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); //控制对指定GPIO组的多个GPIO口操作
	GPIO_TypeDef* GPIOx			//控制的GPIO口所对应的GPIO组
    uint16_t PortVal
        //一组GPIO分为16个 使用16位2进制控制  
        //例如开启第6个端口则为
        	//0x0040
        	//0000 0000 0100 0000 

完整代码展示

//模拟延时函数 不精准
void Delay(int time)
{
    for(int i = 0;i<time;i++)
        for(int j = 0;j<3200;j++);
}
int led_tick = 1, i;


int main(void)
{
    //初始化GPIO口
    GPIO_InitTypeDef GPIOA_InitStructTure;
    
    GPIOA_InitStructTure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIOA_InitStructTure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
    GPIOA_InitStructTure.GPIO_Speed = GPIO_Speed_50MHz;
    
    //GPIOA 开启时钟  开启一组GPIO口
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    GPIO_Init(GPIOA,&GPIOA_InitStructTure);

    //将 指定 IO口 设置为 高电平

    GPIO_WriteBit(GPIOA,GPIO_Pin_All,Bit_SET);

    while(1)
    {
        //GPIOA0 - 6 流水灯形式 逐渐位移
        for(i = 0;i<6;i++)
        {
            GPIO_Write(GPIOA,~(led_tick<<i));
            Delay_ms(500);
        }
        

    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值