(一)学习GPIO端口的初始化设置三步骤
GPIO相关的寄存器 首先需要知道的是,STM32中对于GPIO口的操作,无非就是操作下面的寄存器而已,所谓的标准库也好,HAL库也好,它们都只是对操作寄存器的过程进行了封装,目的是为了减轻你编程时的工作负担。因此对于寄存器的描述,你只要稍微了解一下,大概知道每个寄存器是干啥的,有哪些位,是如何配置的就行,除了一些你觉得需要留意的地方,其它的完全没有必要完全记住,用的时候知道在哪里查就行了。 两个32位的配置寄存器:GPIOx_CRL、GPIOx_CRH 两个32位数据寄存器:GPIOx_IDR、GPIOx_ODR 一个32位的置位/复位寄存器:GPIOx_BSRR 一个16位复位寄存器:GPIOx_BRR 一个32位锁定寄存器:GPIOx_LCKR 注:具体的寄存器描述可以参考《STM32F10x-中文参考手册》的GPIO章节的P113页。强烈建议先花几分钟先看一下这一部分的内容。 GPIO地址![在这里插入图片描述](https://img-blog.csdnimg.cn/ec821f03ac3440ce91a27f053bbe455f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
时钟地址![在这里插入图片描述](https://img-blog.csdnimg.cn/a1d9eb75d215441e8bf508d8f1aa9225.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
初始化地址以及GPIO偏移量 ![在这里插入图片描述](https://img-blog.csdnimg.cn/a67d42793c9745578d4ec598dbcc5467.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
(二)在STM32cubeMX中创建项目
项目设置
在part name里选择自己的芯片,点击信息栏中的具体芯片信息选中,点击start project: ![在这里插入图片描述](https://img-blog.csdnimg.cn/1f5da4d8a0d346c0ace2e1284a9b822a.png) 点击system core,进入SYS,在debug下选择serial wire: ![在这里插入图片描述](https://img-blog.csdnimg.cn/28b5f7edfd6b4c39883c93d5d2b661a8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_19,color_FFFFFF,t_70,g_se,x_16)
时钟设置
接下来观察时钟架构,APB2总线的时钟由hse控制,同时在这个界面得把PLLCLK右边选上: ![在这里插入图片描述](https://img-blog.csdnimg.cn/c2be341e2ab54387a5f96a71272fde21.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16) 点击相应的引脚设置输出三个,是PA4,PB9,PA0: ![在这里插入图片描述](https://img-blog.csdnimg.cn/6e5e50e6561948cda452d6c2661b5656.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/cc265a35bc054f90835ccae6201fcf3f.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
项目完成创建
配置好自己的路径和项目名,IDE那项改为MDK-ARM: ![在这里插入图片描述](https://img-blog.csdnimg.cn/99a29f32c3da46168ec79cd785d5efac.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
(三)keil中编译项目
CubeMX中code generate选择生成初始化.c/.h文件后点击generate code,选择open project ![在这里插入图片描述](https://img-blog.csdnimg.cn/1b978ba6dd484831928b60bdb2b99a12.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16) 系统自动打开keil ![在这里插入图片描述](https://img-blog.csdnimg.cn/516f10bd8d0b4f8bb6025caf5abcc0c7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
main函数中加入以下代码
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_Delay(1000);
}
build debug ![在这里插入图片描述](https://img-blog.csdnimg.cn/fdb474bb006748ea89144db40d81690a.png)
运行效果如下
![在这里插入图片描述](https://img-blog.csdnimg.cn/d58adb37a8e044868a65821900d52852.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rC46L-c54ixbWFp,size_20,color_FFFFFF,t_70,g_se,x_16)
![在这里插入图片描述](https://img-blog.csdnimg.cn/1eae84eb73104fe4a805c9036105e915.gif)
小结
通过这次LED流水灯的学习就像掌握了HELLO WORLD一般,是嵌入式编程最基础的东西。通过本次实验了解到了关于GPIO寄存器的相关操作。
|