STM32学习笔记一——使用STM32CubeMX点亮一个LED灯/制作一个流水灯

前言

就是纯粹地记录一下上课的STM32的作业内容而已,以备以后忘了查阅。

板子型号:STM32F446ZET

创建工程

第一步——打开 STM32CubeMX ,点击下图红圈部分:

在这里插入图片描述
第二步——在下图红圈部分输入自己板子的型号,然后在蓝圈部分选中自己的板子,并且双击它:

在这里插入图片描述
在右下角红圈部分输入你要设置的管脚。这里以将PC13设置为GPIO_Input为例,输入后中心芯片会有黑色的点在闪,这个点就是你搜索的PC13

在这里插入图片描述
点击闪烁的黑点,弹出一个下拉栏,选择GPIO_Input,左键单击后完成设置。

在这里插入图片描述

同理地,搜索到PB0PB7PB14(这三个管脚对应我的板子上的3个LED灯),将其设置为GPIO_Output

因为这就是Hello world!级别的程序,所以不需要配置时钟(配置时钟在上方Clock Configuration处可以设置),直接准备生成代码吧。如下图,点击红圈位置:

在这里插入图片描述
然后把红圈位置修改得和我一样(Project Name这个就无所谓了,爱怎么命名怎么命名):

=
然后就Generate Code吧:

在这里插入图片描述
然后弹出一个窗口,Open FolderOpen Project应该都可以。我这里用的前者,然后在子文件夹MDK-ARM里找到了生成的keil5文件test.uvprojx

在这里插入图片描述

打开生成的keil5文件

然后打开生成的keil5文件,找到左端红圈部分的main.c,双击,然后在右端代码区大概60-100行左右找到int main()

在这里插入图片描述

点亮一个LED灯

功能:按下蓝色按钮灯亮,不按下蓝色按钮灯灭(注意:每次Download完记得按一下RESET按钮,否则程序没现象

Hello world!级别的程序,没什么好说的:

其他的都是 STM32CubeMX 自动生成的,自动生成的注释啥的我都删了,真正自己写的只有while(1)里面的内容:把下面代码里的内容替换掉int main()

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  while (1)
  {
		if((GPIOC->IDR & (1UL<<13)) == (1UL<<13))
			GPIOB->ODR |= (1UL<<7);
		else
			GPIOB->ODR &=~(1UL<<7);
  }
}

然后按顺序点击红圈部分(编译)、蓝圈部分(下载到板子上):

在这里插入图片描述

按下RESET后,点亮一个LED灯就做完了。按下蓝色按钮灯亮,不按下蓝色按钮灯灭

制作一个流水灯

功能:按下蓝色按钮执行流水灯操作,不按下蓝色按钮流水灯停止运动,并保持这个LED灯的点亮(注意:每次Download完记得按一下RESET按钮,否则程序没现象

其他的都是 STM32CubeMX 自动生成的,自动生成的注释啥的我都删了,真正自己写的只有while(1)里面的内容:把下面代码里的内容替换掉int main()

int main(void)
{
	unsigned long i = 0;
	unsigned long Target = 262144;
	unsigned long LED_num = 1;
	HAL_Init();
	SystemClock_Config();
	MX_GPIO_Init();
	while (1)
	{
		if(LED_num == 1)	// PB0 on, else off
		{
			GPIOB->ODR |=  (1UL<<0);
			GPIOB->ODR &= ~(1UL<<7);
			GPIOB->ODR &= ~(1UL<<14);
		}
		else if(LED_num == 2)	// PB7 on, else off
		{
			GPIOB->ODR &= ~(1UL<<0);
			GPIOB->ODR |=  (1UL<<7);
			GPIOB->ODR &= ~(1UL<<14);
		}
		else if(LED_num == 3)	// PB14 on, else off
		{
			GPIOB->ODR &= ~(1UL<<0);
			GPIOB->ODR &= ~(1UL<<7);
			GPIOB->ODR |=  (1UL<<14);
		}
		while(1)
		{
			if((GPIOC->IDR & (1UL<<13)))	// if PC13 be clicked
			{
				if(++i == Target)// loop Target times and LED_num++
				{
					i = 0;
					if(++LED_num == 4)
						LED_num = 1;
					break;
				}
			}
		}
	}
}

然后按顺序点击红圈部分(编译)、蓝圈部分(下载到板子上):

在这里插入图片描述

按下RESET后,一个流水灯就做完了。按下蓝色按钮执行流水灯操作,不按下蓝色按钮流水灯停止运动,并保持这个LED灯的点亮。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值