日记——零基础自学STM32(第一天)

使用的普中Stm32F429进行自学,自学视频主要是普中自带的视频以及正点原子的视频。正点原子的视频讲解的更加细致一点。以下是自学中自己的体会和总结,就相当于日记一般,梳理一下自己的思路,如有错误,望指出,感谢!

首先安装keil5以及CH340驱动。

第一个实验是点亮第一个LED小灯

首先创建工程,配置驱动文件,HAL库,以及软件接口,并建立公用系统文件(主要存放开发需要用到的文件,例如片上外设接入层系统头文件等),以及用户文件主函数等,再额外建立一个应用文件(主要针对需要开发的功能进行书写)。

前面的步骤跟着教程一步步走,然后主要就是要进行文件的管理,需要注意的是,在书写.h文件时要主要不要重复预处理相同的头文件,将开发需要的公用文件提取到公用系统文件目录下的文件中,避免后续移植时头文件的大量更改。

在本次实验中LED12分别对应这GPIOB中的PIN0和PIN1,要学会看芯片原理图,找到对应外设的引脚。

在进行点亮LED灯的实验中,首先写LED初始化函数,定义GPIO_InitTypeDef结构体,并将对应的GPIOx的时钟使能。定义结构体中的管脚以及模式,设置上下拉模式,并且定义速度,最后进行初始化,并将对应的引脚置为1.

这里补充一下,对于不同的GPIO模式可以参考开发手册。具体为8种模式。对于输入模式,主要分为上拉,下拉,浮空,模拟功能四种种模式,对于上拉,当I/O引脚无输入时默认为高电平,下拉同样,而浮空状态,当I/O引脚无输入时处于高阻态,会受到外界环境的影响。对于输入模式,主要分为开漏输出,推挽输出,开漏式复用功能,推挽式复用功能,此功能下同样存在上下拉,详细区别参考开发攻略,需要注意的是在输出控制中,存在一个反相器,即取反,即当输出寄存器ODR为高电平时实际输出控制为低电平,PMOS导通,反之则NMOS导通。

在主函数中初始化HAL库,并设置系统时钟,调用LED初始化函数,在While循环中,对利用HAL库对引脚电平进行反转,并加上延迟,进行达到闪烁的效果。

具体LED初始化函数代码如下:

#include "led.h"


void LED_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;//定义初始化结构体变量
	
	__HAL_RCC_GPIOB_CLK_ENABLE();//时钟使能
	
	GPIO_InitStructure.Pin= GPIO_PIN_0|GPIO_PIN_1;//定义管脚
	GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;//定义推挽输出
	GPIO_InitStructure.Pull = GPIO_PULLUP;//上拉模式,输出高电平
	GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;//定义高速
	HAL_GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化
	
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);//引脚置1
	HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);//引脚置1
}

主函数代码如下:

#include "system.h"
#include "led.h"


void delay(u32 i)
{
	while(i--);
}
/*******************************************************************************
* 函 数 名         : main
* 函数功能		   : 主函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
int main()
{
	
	HAL_Init();                     //初始化HAL库 
	SystemClock_Init(25,360,2,8);   //设置时钟,180Mhz
	LED_Init();
	
	
	while(1)
	{
		//HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
		HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
		delay(0x7fffff);
		
		
//		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);//设置PB1输出低
//		delay(0x7fffff);
//		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);//设置PB1输出低
//		delay(0x7fffff);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值