历史上的今天
今天是:2024年08月31日(星期六)
2021年08月31日 | 玩转STM32CubeMX | 跑马灯
2021-08-31 来源:eefocus
跑马灯
1.GPIO简介
每个GPIO端口有两个32位配置寄存器(GPIOx_CRL和GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR),GPIO端口的每个位可以由软件分别配置成多种模式:输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽式输出、推挽式复用功能以及开漏复用功能。I/O端口位的基本结构如下图示:
2.硬件设计
LED(D0~D7)一端接上拉3.3V,另一端依次接到STM32F103的PC0-PC7引脚,本实验只使用D1和D2,连接原理图如下:

3.软件设计
3.1 STM32CubeMX设置
➡️RCC设置外接HSE,时钟设置为72M
➡️PC0和PC2设置为GPIO推挽输出模式、上拉、高速、默认输出电平为高电平
➡️输入工程名,选择工程路径(不要有中文),选择MDK-ARM V5;勾选Generated periphera initialization as a pair of ‘.c/.h’ files per IP ;点击GENERATE CODE,生成工程代码
3.2 MDK-ARM软件编程
➡️在gpio.c文件中可以看到PC0/PC1管脚的初始化函数
1void MX_GPIO_Init(void)
2{
3 GPIO_InitTypeDef GPIO_InitStruct = {0};
4
5 __HAL_RCC_GPIOC_CLK_ENABLE(); //开启GPIOC时钟
6
7 //PC0和PC1置1,默认初始化后灯灭
8 HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin, GPIO_PIN_SET);
9
10 GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin; //PC0和PC1
11 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; //推挽输出
12 GPIO_InitStruct.Pull = GPIO_PULLUP; //上拉
13 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //高速
14 HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
15}
➡️在main.c函数中编写跑马灯程序(注意编写的程序应该在相应的USER CODE范围内,否则再次使用CubeMX修改配置时,USER CODE范围之外的程序会被清除)
1int main(void)
2{
3 HAL_Init();
4 SystemClock_Config();
5 MX_GPIO_Init();
6 /* Infinite loop */
7 /* USER CODE BEGIN WHILE */
8 while (1)
9 {
10 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET); //LED1亮
11 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET); //LED1灭
12 HAL_Delay(500); //延时500ms
13 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET); //LED2亮
14 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET); //LED2灭
15 HAL_Delay(500); //延时500ms
16 /* USER CODE END WHILE */
17 /* USER CODE BEGIN 3 */
18 }
19 /* USER CODE END 3 */
20}
4.下载验证
➡️编译工程得到如下结果:

从以上编译信息可以看出,我们的代码占用FLASH大小为:2956字节(2604+352),所用的SRAM大小为:1040字节(16+1024)
以下是编译结果里面的几个数据的含义:
Code:表示程序所占用FLASH的大小(FLASH)
RO-data:即Read Only-data,表示程序定义的常量(FLASH)
RW-data:即Read Write-data,表示已被初始化的变量(SRAM)
ZI-data:即Zero Init-data,表示未被初始化的变量(SRAM)
有了这个就可以知道你当前使用的flash和sram大小了,所以一定要注意的是程序的大小不是.hex文件的大小,而是编译后的Code和RO-data之和
➡️选择相应的仿真器下载程序

史海拾趣
|
汽车转向泵是一种中高档汽车的零部件,它由多种零件组成,需要借助不同的设备,按照一定的工序把它们组装起来。在整个过程中,不仅要完成基本的装配,还要对过程中诸如压力、位移、时间等参数进行实时监控,以满足工艺所提出的严格要求,保证装配质 ...… 查看全部问答> |
|
按键扫描是每个搞单片机的都会遇到的问题,也是一个开发人员必须具备的基本功。先从最基本的说起。在此声明,没有代码,也不要向我要代码,也不想穿裤子,如果你看了帖子还写不出代码,那么我只能说你太笨了。。。。。。。。还是那句话,搞开发重要 ...… 查看全部问答> |
|
我想变成程序,但不知道要多少钱,请高手个价位 仪器的功能大概如下;1,压力传感器测得压力显示在数码管上,另外可以对通过对标定对传感器进行微调 &nbs ...… 查看全部问答> |
|
各位大哥: 最近在研究用 IO 来做键盘, 有几个问题不明白, 1、很多IO键盘驱动都是使用中断来实现,比如 4X4 的要 4 个中断,首先创建一个事件,然后启动一个线程, 通 ...… 查看全部问答> |
|
我想用nGCS2作片选,LDADDR0-LDADDR7作地址线,LDDATA0-LDDATA7作数据线进行CPLD的读写数据.于是我定义了下面的结构体: #define NGCS2_BASE 0XA4000080 #define NGCS2_PHY_BASE 0x10000080 ///定义CPLD控制寄存器地 ...… 查看全部问答> |
|
大家好: 请问PRO/E野火版怎么安装?安装时要把什么来代替一下吗?本来想把安装的界面的图传上来不知道怎么搞,还是请大家帮忙看下 1. boot up your pc with windows 2. start pro/e setup 3. open ptc_licfile.dat with your fa ...… 查看全部问答> |
|
Cortex-M3和Cortex-M0的区别 ARM架构自v6开始分为A/R/M三个系列。CM0/CM3都是属于M系列的。CortexM0是基于v6架构;CortexM3是v7架构。主要区别 性能: Cortex-M0 基于32 位架构,利用一个 通过MULS 指令直接与内核相连的3 ...… 查看全部问答> |




