stm32学习笔记(五)跑马灯寄存器版本

    xiaoxiao2022-07-07  206

    提前说说:

    五月底了,得加紧学习进度了,想在六月底把32的基础知识部分学完并且基本掌握,感觉还是有点难度的。(一天在32上学习的时间大约是3~4h)。

    跑马灯寄存器版

    一开始接触寄存器的时候,不清楚寄存器是干什么用的。在学Arduino的时候,写代码控制io口依靠的就是digitalWrite和digitalRead函数,而并没有清楚这些函数是怎么调整io的模式,端口引脚还有输出速率。

    刚开始学寄存器版本的时候其实我还是不清楚寄存器是干什么的,跑马灯实验学完之后,我才对寄存器有一个基本的概念:控制寄存器来实现底层的驱动。

    同样,开始之前还得继续新建模板啥的,这里就略过了,上篇有一个大致的介绍。

    那么就从led.h文件开始吧

    #ifndef __LED_H #define __LED_H void LED_Init(void); #endif

    上面代码是C语言的基础,这里就不做过多的解释,大体意思是led.h文件下包含LED_Init()函数

    下来在led.c文件中输入代码

    #include "stm32f10x.h" #include "led.h" void LED_Init(void) { RCC->APB2ENR|=1<<2; //使能A时钟 RCC->APB2ENR|=1<<5; //使能D时钟 GPIOA->CRH&=0xFFFFFFF0; //将A端口高位的第一位,即A8位先清除 GPIOA->CRH|=0x00000003; //将A8设置为推挽输出输出速率为50MHz GPIOA->ODR|=1<<8; //拉高A8电平,先使其没有电压差 GPIOD->CRL&=0xFFFFF0FF; //将D端口高位的第一位,即D2位先清除 GPIOD->CRL|=0x00000300; //将D2设置为推挽输出输出速率为50MHz GPIOD->ODR|=1<<2; //拉高D2电平,先使其没有电压差 }

    接下来在USER文件下的main.c下输入代码:

    #include "stm32f10x.h" #include "delay.h" #include "led.h" int main(void) { delay_init(); LED_Init(); while(1) { GPIOA->ODR|=1<<8; //A8电平拉高 GPIOD->ODR|=1<<2; //D2电平拉高 delay_ms(500); //延迟500ms GPIOA->ODR=~(1<<8); //A8电平拉低,产生电压差 GPIOD->ODR=~(1<<2); //D2电平拉低,产生电压差 delay_ms(500); } }

    接下来就是编辑,上传给板子(具体方法前一节有),观察板子发现和预期的效果相同。

    最新回复(0)