STM32F429点亮led实验

一.调用的函数:

  1. 在stm32f429中点亮led通过控制引脚的高低电平来实现,在f429的hal库中控制引脚高低电平的函数:
    void HAL_GPIO_WritePin(GPIO_TypeDef GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);*
    使用样例(引脚PB1输出低电平):
    HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
    (RESET: 输出低电平 ; SET:输出高电平)

二.涉及到的寄存器

  1. stm32f429中通过IDR寄存器来接收GPIO口的输入电平:
    在这里插入图片描述

  2. 通过ODR寄存器来控制GPIO口的输出电平:
    在这里插入图片描述
    该寄存器用于设置某个 IO 输出低电平(ODRy=0)还是高电平(ODRy=1),该寄存器也仅在输出模式下有效。
    举例:如果我要使得PB2口输出高电平(即:ODR2=1),其余口为低电平:
    ODR寄存器16位可以表示成:0000 0000 0000 0100(赋值即:0x04);
    则代码可以写成:GPIOB->ODR=0x04;

  3. BSRR寄存器
    寄存器 BSRR,它叫 置位/复位寄存器。该寄存器和 ODR 寄存器具有类似的作用,都可以用来设置 GPIO 端口的输出位是 1 还是 0。
    在这里插入图片描述
    BSRR寄存器是个32位的寄存器,它分为高16位和低16位。
    对于低16位即 BSy[15:0]:当被写为“1”时,对应引脚输出高电平; 写“0”时,无影响。
    对于高16位即 BRy[31:16]:当被写为“1”时,对应引脚输出低电平; 写“0”时,无影响。

    举例:如果我要使得PB2口输出高电平,再使其输出低电平,而其余口为低电平:
    则代码可以写成:
    GPIOB->BSRR=0x04; ---------------------------- // PB2口输出高电平
    GPIOB->BSRR=0x04<<16;---------------------- // PB2口输出低电平
    “<<”时c语言中的位移运算符。

附上代码

  1. 主函数是使用HAL库函数实现控制IO口输出:
int main(void)
{
    HAL_Init();                     //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
    delay_init(180);                //初始化延时函数
    LED_Init();                     //初始化LED  
    while(1)
    {
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); //LED0对应引脚PB1拉低,亮,等同于LED0(0),PBout(0)=0
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);   //LED1对应引脚PB0拉高,灭,等同于LED1(1),PBout(1)=1
        delay_ms(500);          //延时500ms
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);   //LED0对应引脚PB1拉高,灭,等同于LED0(1),PBout(0)=1
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //LED1对应引脚PB0拉低,亮,等同于LED1(0),PBout(1)=0
        delay_ms(500);                                      //延时500ms 
    }
}

  1. 下面主函数使用直接操作寄存器方式实现跑马灯
//GPIOA->BSRR低16位某位为“1”,则对应的IO端口引脚置“1”;
//GPIOA->BSRR高16位某位为“1”,则对应的IO端口引脚置“0”;
int main(void)
{ 
    HAL_Init();                     //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
    delay_init(180);                //初始化延时函数
    LED_Init();                     //初始化LED  
    while(1)
    {
     GPIOB->BSRR=0x02;              //LED0亮
     GPIOB->BSRR=0x01<<16;          //LED1灭                
     delay_ms(500);
     GPIOB->BSRR=0x02<<16;          //LED0灭
     GPIOB->BSRR=0x01;              //LED1亮
     delay_ms(500);
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值