STM32利用GPIO寄存器实现流水灯

目录

一、GPIO初始化

1.时钟设置

2.输出模式和输出速率设置

二、代码

三、实现效果

四、总结

五、参考文献


一、GPIO初始化

1.时钟设置

这次实验用的GPIOA、GPIOB、GPIOC,查手册都是属于APB2.

STM32利用GPIO寄存器实现流水灯_第1张图片

 找到端口偏移地址以及对应端口所在位置

STM32利用GPIO寄存器实现流水灯_第2张图片

2.输出模式和输出速率设置

本次实验采用通用推挽输出模式,最高输出时钟频率50Mhz。分别用到A0、B5、C15三个引脚。其中A0、B5属于端口配置低寄存器偏移地址为0x00,C15属于端口配置高寄存器偏移地址为0x04。

STM32利用GPIO寄存器实现流水灯_第3张图片

STM32利用GPIO寄存器实现流水灯_第4张图片

 STM32利用GPIO寄存器实现流水灯_第5张图片

 找到GPIOx端口基地址

STM32利用GPIO寄存器实现流水灯_第6张图片

配置对应引脚寄存器,基地址+偏移量

#define GPIOB_CRL (*(unsigned int *)0x40010C00)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)

 

设置输出模式为推挽输出,输出速度为50Mhz

要设置为50M推挽输出模式,所以该寄存器第3位到第0位是0111,也就是0x03

二、代码

void SystemInit(void);
void Delay_ms(volatile  unsigned  int);

void Delay_ms( volatile  unsigned  int  t)
{
     unsigned  int  i;
     while(t--)
         for (i=0;i<1000;i++);
}


int main(){
    
    RCC_APB2ENR |= (1<<3); 
    RCC_APB2ENR |= (1<<4); 
    RCC_APB2ENR |= (1<<2); 
    
    

    // B5
    GPIOB_CRL |= (1<<20);  
    GPIOB_CRL &= ~(0xE);  
    //C15
    GPIOC_CRH |= (1<<28); 
    GPIOC_CRH &= ~(0xE);  
    //A0
    GPIOA_CRL |= (1<<0);  
    GPIOA_CRL &= ~(0xE);  

    
    
    GPIOB_ODR |= (1<<5);  
    GPIOC_ODR |= (1<<15); 
    GPIOA_ODR |= (1<<0);  
    
    
    while(1){
        GPIOB_ODR &= ~(1<<5); 
        Delay_ms(1000000);
        GPIOB_ODR |= (1<<5);  

        
        GPIOC_ODR &= ~(1<<15); 
        Delay_ms(1000000);
        GPIOC_ODR |= (1<<15);  

        
        GPIOA_ODR &= ~(1<<0); 
        Delay_ms(1000000);
        GPIOA_ODR |= (1<<0);  

    }
    
}

三、实现效果

首先在keil5里面生成了hex文件之后,需要我们安装烧录工具,还需要安装驱动,之后把hex文件烧录到芯片中去,详细信息可见参考文献。

STM32利用GPIO寄存器实现流水灯_第7张图片

 具体实验效果如下:

 

四、总结

通过这次实验,我了解了寄存器工作的原理,以及如何利用寄存器去实现对管脚的运用,这次实验是第一次软硬件一起使用,过程中也遇到了很多问题,比如烧录的时候不能与串口建立连接,然后在老师和同学以及网上的资料,逐渐解决了困难。我还感受到在硬件的使用过程中,也必须小心谨慎,有些连接不好也会出现问题,总之,这次实验我体会到了最原始的方法去使用芯片,对我们后面的学习作了铺垫。

五、参考文献

(2条消息) STM32最小核心板F103串口通信USART_vic_to_ry的博客-CSDN博客icon-default.png?t=L9C2https://blog.csdn.net/vic_to_ry/article/details/110451036(2条消息) STM32寄存器的简介、地址查找,与直接操作寄存器_geekYatao-CSDN博客_stm32寄存器icon-default.png?t=L9C2https://blog.csdn.net/geek_monkey/article/details/86291377     STM32参考手册大汇总,史上巨全,再也不用到处找啦(2020.5) - STM32团队 ST意法半导体中文论坛 (stmicroelectronics.cn)icon-default.png?t=L9C2https://shequ.stmicroelectronics.cn/forum.php?mod=viewthread&tid=623877

你可能感兴趣的:(1024程序员节,stm32)