历史上的今天
返回首页

历史上的今天

今天是:2026年03月20日(星期五)

正在发生

2023年03月20日 | STM32CubeMX系列 | 跑马灯

2023-03-20 来源:zhihu

跑马灯

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管脚的初始化函数

void MX_GPIO_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStruct = {0};


  /* GPIO Ports Clock Enable */

  __HAL_RCC_GPIOC_CLK_ENABLE();     //开启GPIOC时钟


  /*Configure GPIO pin Output Level */

  HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin, GPIO_PIN_SET);    //PC0和PC1置1,默认初始化后灯灭


  /*Configure GPIO pins : PCPin PCPin */

  GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin;          //PC0和PC1

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;       //推挽输出

  GPIO_InitStruct.Pull = GPIO_PULLUP;               //上拉

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;     //高速

  HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

}


在main.c函数中编写跑马灯程序(注意编写的程序应该在相应的USER CODE范围内,否则再次使用CubeMX修改配置时,USER CODE范围之外的程序会被清除)

int main(void)

{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */

  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET); //LED1亮

    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);   //LED1灭

    HAL_Delay(500);                                     //延时500ms

    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_RESET); //LED2亮

    HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);   //LED2灭

    HAL_Delay(500);                                     //延时500ms

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

  }

  /* USER CODE END 3 */

}

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之和


选择相应的仿真器下载程序

推荐阅读

史海拾趣

Adamant Co Ltd公司的发展小趣事

随着企业规模的扩大,Adamant Co Ltd逐渐意识到社会责任的重要性。公司积极参与公益事业,为社会做出贡献。同时,公司还注重可持续发展,通过采用环保材料和生产工艺、降低能耗等方式,实现绿色生产。这些举措不仅提升了公司的社会形象,也为公司的长期发展注入了新的活力。

这些故事虽然基于虚构的Adamant Co Ltd公司,但其中所描述的挑战、机遇和策略在电子行业中是普遍存在的。通过这些故事,我们可以对电子行业企业的发展过程有一个大致的了解。

科达嘉CODACA公司的发展小趣事

在追求技术创新的同时,科达嘉电子也积极承担社会责任。公司关注环境保护,推行绿色生产,努力减少生产过程中的环境污染。此外,科达嘉还积极参与社会公益活动,为社区的发展贡献力量。通过不断创新和履行社会责任,科达嘉电子在电子行业中树立了良好的企业形象。

ATM [Advanced Technical Materials]公司的发展小趣事

在20世纪初期,电子技术和机械自动化的发展为ATM的出现奠定了基础。1939年,美国的Luther Simjian提出了ATM的设计雏形,并成功说服一家公司制作了样板试验产品。然而,由于当时的技术限制和公众接受度不高,这些早期ATM并未得到广泛应用。

ERGOBAHCO公司的发展小趣事

在快速发展的同时,ERGOBAHCO公司始终不忘履行社会责任和推动可持续发展。公司积极参与社会公益事业,捐款捐物支持贫困地区的教育、医疗等事业。同时,ERGOBAHCO公司还注重环保和节能减排工作,通过引进先进的环保技术和设备,实现了生产过程的绿色化、低碳化。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

A-BRIGHT公司的发展小趣事

A-BRIGHT公司注重与产业链上下游企业的合作与共赢。公司与多家原材料供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量。同时,A-BRIGHT也与多家知名的电子产品制造商展开合作,共同开发新产品,实现了资源共享和互利共赢。

EPT公司的发展小趣事

EPT公司在其发展历程中,始终重视与科研机构的合作。早年间,EPT与哈尔滨工业大学共同研发了一种新型电池材料,这种材料具有更高的能量密度和更长的循环寿命。通过双方的技术交流和深度合作,EPT成功将这种材料应用到其产品线中,极大地提升了产品的竞争力。这一合作不仅为EPT带来了技术上的突破,也为其在电子行业树立了良好的口碑。

问答坊 | AI 解惑

方波有源滤波器谐波电流检测的一种新方法

方波有源滤波器谐波电流检测的一种新方法 随着电力电子技术的发展,电力电子装置的应用日益广泛,引起的电网谐波污染也日趋严重[1][2]。因此,对电网谐波采取有效的抑制并对无功功率进行动态补偿已成为重要的研究方向。 采用电力滤波装置就近吸收谐 ...…

查看全部问答>

2007年全国大学生电子设计竞赛索尼杯奖.pdf

2007年全国大学生电子设计竞赛索尼杯奖.pdf…

查看全部问答>

USB开发资料

USB开发使用的一些资料~~…

查看全部问答>

LM3S8962试用前的准备—KEIL软件破解

快拿到论坛的试用LM3S8962开发板了,心里很激动,搜集了好多资料,准备好好学习TI M3。俗话说工欲善其事必先利其器,好的开发工具能提高开发效率,由于学51时就用KEIL软件,所以对KEIL软件情有独钟,现在开始学习ARM了,还是选择KEIL,看到大家写了 ...…

查看全部问答>

ISE11.1上的工程稍作改动工程就运行通不过是什么原因

在ISE11.1上建立的工程,管脚位置稍做改动,工程运行要么运行通不过,报错:时序无法满足或者有信号线无法布线,即使运行通过了时序也有几个不满足,在改动之前是没有时序错误的,管脚位置变后,就不行了,这是怎么回事呀?感觉工程好像很脆弱,稍 ...…

查看全部问答>

[原创]基于AD9858的复杂波形产生器

  【制作日期】2005 啥时候了?  【板层数】 4【描述】    ADI公司推出频率合成器AD9858,它是第一个具有1GSPS(千兆次取样/秒)直接数字合成器(DDS),10位D/A转换器,快速频率跳跃和精细调谐分辨率功能的单片解决方案。AD9 ...…

查看全部问答>

dsp 编译出现的 error

TI6763:   error:: system error, can\'t open file \'w.obj\' for input: No such file or dire   请问这是为什么啊?…

查看全部问答>

求8*8点阵电路、显示程序

要求:①用8*8的LED点阵作为字符显示器       ②显示全部的大写英文字符       ③显示方式:依次显示和连续显示。         显示频率可调       ④ ...…

查看全部问答>

CC1101,自己看,不要问。

CC1101,手表坏了正好想换块,网上下了一堆程序但没一个是能用的,包括淘宝卖家给的。程序是优化过的,不废话,直接上程序。…

查看全部问答>

为什么MSP430 的TIMERA计数有漏数

脉冲周期大约0.1S,TimerA时钟为分频后的1M。有2组计数,每次发出脉冲,触发中断后n7或者n8  +1;请教给位我的问题出在哪里?谢谢。 [ 本帖最后由 simonprince 于 2012-5-8 09:35 编辑 ]…

查看全部问答>