前言
就是纯粹地记录一下上课的STM32的作业内容而已,以备以后忘了查阅。
板子型号:STM32F446ZET
创建工程
第一步——打开 STM32CubeMX ,点击下图红圈部分:
第二步——在下图红圈部分输入自己板子的型号,然后在蓝圈部分选中自己的板子,并且双击它:
在右下角红圈部分输入你要设置的管脚。这里以将PC13
设置为GPIO_Input
为例,输入后中心芯片会有黑色的点在闪,这个点就是你搜索的PC13
。
点击闪烁的黑点,弹出一个下拉栏,选择GPIO_Input
,左键单击后完成设置。
同理地,搜索到PB0
、PB7
、PB14
(这三个管脚对应我的板子上的3个LED灯),将其设置为GPIO_Output
。
因为这就是Hello world!
级别的程序,所以不需要配置时钟(配置时钟在上方Clock Configuration处可以设置),直接准备生成代码吧。如下图,点击红圈位置:
然后把红圈位置修改得和我一样(Project Name
这个就无所谓了,爱怎么命名怎么命名):
然后就Generate Code吧:
然后弹出一个窗口,Open Folder
和Open 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灯的点亮。