3、【STM32】跑马灯实验

前言

使用的是正点原子的探索者开发板进行学习,芯片:STM32F407ZGTx

学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。

本文档添加了对代码的在线调试功能,有助于大家更好理解相关寄存器的变化。

理论学习

GPIO的相关理论请参考:

[Skill] STM32的GPIO工作原理及工作模式_追逐者-桥的博客-CSDN博客STM32的IO口电路原理及工作模式如何选择GPIO口模式https://blog.csdn.net/ARM_qiao/article/details/125080228

GPIO配置相关的IO口寄存器: 

实践学习

一、设计规划

1.1 实验目标

开发板上两个LED:DS0和DS1交替闪烁,实现跑马灯的效果。

1.2 硬件资源

二、程序设计

2.1 工程文件

添加工程目录(.c和.h)

2.2 led.h文件

#ifndef _LED_H
#define _LED_H
#include "sys.h"  

//LED端口定义
#define LED0 PFout(9)     //DS0,基于sys文件的位带操作
#define LED1 PFout(10)    //DS1
void LED_Init(void);      //初始化函数声明

#endif

2.3 led.c文件

使用sys.c文件中的GPIO_Set函数对IO口进行初始化

 RCC AHB1外设时钟使能寄存器(RCC_AHB1ENR)

5 GPIOFEN IO 端口 F 时钟使能 (IO port F clock enable)
由软件置 1 和清零。
0 :禁止 IO 端口 F 时钟
1 :使能 IO 端口 F 时钟
#include "led.h" 
//初始化PF9和PF10为推挽输出
//LED IO初始化
void LED_Init(void)
{
	RCC->AHB1ENR |= 1<<5;                     //使能相关位的时钟
	GPIO_Set(GPIOF,PIN9|PIN10,                //设置相应的IO口
			 GPIO_MODE_OUT,GPIO_OTYPE_PP,     //MODE_OUT:输出   OTYPE_PP:推挽
			 GPIO_SPEED_100M,GPIO_PUPD_PU);   //SPEED_100M      PUPD_PU:上拉
	LED0 = 1;
	LED1 = 1;
}

 1<<5 = 0x0000 0010       

RCC->AHB1ENR = RCC->AHB1ENR | 0x0000 0010    //将寄存器与左移表达式按位或,即将第5位置为1,即GPIOF的时钟进行时钟使能。

然后通过sys.c程序中的GPIO_Set函数对IO口进行配置与使能。

2.3 text.c文件

Stm32_Clock_Init(336,8,2,7);

plln:主频系数 = 8*366 = 2688MHz

pllm:主PLL = 2688 MHz / 8 = 366MHz

pllp:系统时钟 = 366 / 2 = 168MHz

pllq:USB/SDIO/随机数产生器时钟 = 168MHz / 7

#include "sys.h"
#include "delay.h"
#include "led.h"

int main(void)
{
	Stm32_Clock_Init(336,8,2,7);    //时钟频率168M
	delay_init(168);                 
	LED_Init();
	while(1)
	{
		LED0 = 0;
		LED1 = 1;
		delay_ms(500);
		LED0 = 1;
		LED1 = 0;
		delay_ms(500);
	}
}

三、在线调试

 将代码下载到32开发板上,然后点击1进行代码在线调试。

点击2打开观察窗口,添加PF9和PF10两个GPIO的值,同时打开GPIOF的寄存器(最右面所示)

  • 如下图在线调试后代码运行到启动文件的_main程序,下一步将进入main中执行C程序。

  • 在LED_Init(void)中的GPIO_set后设置一个断点,来观察GPIO相关寄存器配置变化

可以通过寄存器相关的位看出其GPIO模式的配置:MODER将GPIO9/10配置为01(通用输出模式)、OTYPER复位状态(输出推挽)、OSPEEDR将GPIO9/10配置为11(100MHz高速)、ODR将GPIO9/10两个位配置为1(初始化点亮LED灯)

整体运行代码,可以发现输出寄存器PF9/10在0、1两者进行转换。

LED寄存器变化

四、上板验证

代码编译后无错误,点击下载按钮

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追逐者-桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值