2023年7月14日发(作者:)
基于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(复⽤推挽输出)。 其速度模式不在此述说。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_=GPIO_MODE_OUTPUT_PP; //ÍÆÍìÊä³ö
GPIO_=GPIO_PIN_0 | GPIO_PIN_1; //ÉèÖÃÒý½Å GPIO_=GPIO_PULLUP; //ÉèÖÃÉÏÏÂÀ£¬´Ë´¦ÎªÉÏÀ
GPIO_=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); }}
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689328311a230588.html
评论列表(0条)