基于STM32F4的跑马灯实验

备注:此实验是根据正点原子视频所写。初学STM32,完全是用于自我记录,若有问题,麻烦指正。

1. 初始化HAL库。
HAL_Init();

2.初始化系统时钟。

Stm32_Clock_Init();

3.使能IO口时钟。

__HAL_RCC_GPIOB_CLK_ENABLE(); 。此处使能的是GPIOB。其原理图如下图所示:

4.初始化IO口模式。

在GPIO的源文件中,void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init),其中第一个参数是用来指定需要初始化的GPIO对应的GPIO组,取值范围是GPIOA~GPIOK。第二个参数为初始化参数结构体指针,结构体类型为GPIO_InitTypeDef。

故先在main函数中定义一个变量:

GPIO_InitTypeDef GPIO_InitStructure;   

而GPIO_InitTypeDef中,包括了,Pin(指定IO口),Mode(模式设置),Pull(上下拉设置),Speed(速度模式)和Alternate(复用映射配置,此实验为设计到)。模式设置中输入模式有:GPIO_Mode_AIN(模拟输入)、GPIO_Mode_IN_FLOATING(浮空输入)、GPIO_Mode_IPD(下拉输入)、GPIO_Mode_IPU上拉输入。输出模式有:GPIO_Mode_Out_OD(开漏输出)、GPIO_Mode_Out_PP(推挽输出)、GPIO_Mode_Out_OD(复用开漏输出)、GPIO_Mode_Out_PP(复用推挽输出)。

笔者在想设置了模式,却还要设置上下拉,这是为什么?其答案连接在此:GPIO_Init函数里明显是有这个上下拉配置的,并没有针对这个输入输出模式的if字段。 就电路分析的角度来看,复用推挽输出模式下无论是上拉还是下拉都不会影响其原本配置的电平输出。 而在开漏输出模式下,其高电平输出的实际电平却由外部的上下拉决定,类似于TTL门电路的漏极开路输出,而低电平输出的实际电平与复用推挽一致,不被外部的上下拉影响,恒为低电平。 icon-default.png?t=M1L8https://www.cnblogs.com/LeoCathyFelix/p/12938319.html

 其速度模式不在此述说。

5.操作IO口,输出高低电平。

操作高低电平,是为了控制灯的亮与灭。

HAL_GPIO_WritePin();

6.其全部完整代码如下:

#include "sys.h"
#include "delay.h"
#include "usart.h"



int main(void)
{
     
    HAL_Init();                     //³õʼ»¯HAL¿â    
    Stm32_Clock_Init(360,25,2,8);   //ÉèÖÃʱÖÓ,180Mhz
	
	__HAL_RCC_GPIOB_CLK_ENABLE();  //ʹÄÜPBʱÖÓ
	delay_init(180);  //ÑÓʱº¯Êý£¬ÏµÍ³Ê±ÖÓΪ180M
	
	//³õʼ»¯IO¿Ú
	GPIO_InitTypeDef GPIO_InitStructure;  //³õʼ»¯²ÎÊý½á¹¹ÌåÖ¸Õë 
	GPIO_InitStructure.Mode=GPIO_MODE_OUTPUT_PP;  //ÍÆÍìÊä³ö 
	GPIO_InitStructure.Pin=GPIO_PIN_0 | GPIO_PIN_1;  //ÉèÖÃÒý½Å
	GPIO_InitStructure.Pull=GPIO_PULLUP; //ÉèÖÃÉÏÏÂÀ­£¬´Ë´¦ÎªÉÏÀ­ 
	GPIO_InitStructure.Speed=GPIO_SPEED_FREQ_VERY_HIGH;  //ÉèÖÃËÙ¶È 
	HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);  //½á¹¹Ì壬ÐèҪȡµØÖ·& 
	
	//²Ù×÷IO¿Ú£¬Êä³ö¸ßµÍµçƽ
	while(1){
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);  //PB0=0µÍµçƽ 
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);  //PB0=0µÍµçƽ 
	delay_ms(500);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
	delay_ms(500);
	}
}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值