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

提前说说:

五月底了,得加紧学习进度了,想在六月底把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);
			
	}
	
}

接下来就是编辑,上传给板子(具体方法前一节有),观察板子发现和预期的效果相同。
stm32学习笔记(五)跑马灯寄存器版本_第1张图片

你可能感兴趣的:(stm32,stm32基础)