历史上的今天

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

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

发布者:玉树琼花 来源: zhihu关键字:STM32CubeMX系列  跑马灯  GPIO口 手机看文章 扫描二维码
随时随地手机看文章

跑马灯

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


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

关键字:STM32CubeMX系列  跑马灯  GPIO口 引用地址:STM32CubeMX系列 | 跑马灯

上一篇:CAN总线学习笔记 | CAN基础知识介绍
下一篇:STM32CubeMX系列 | 按键输入

推荐阅读

    iPhone X高达999美元的起售价格曾经被很多分析师抨击,他们认为过高的售价会吓退很多潜在用户,但最后的结果并不如此,凭借iPhone X的高利润,苹果上季度的财报相当好看。但是老话说得好:时候未到。最近,iPhone X的高售价正在为苹果带来越来越多的麻烦。  分析师Jeffrey Kvaal进行了一次需求调查,结果显示在2018年,iPhone的市场需求不会...
人工智能(AI)这个概念虽然从本世纪 50 年代提出,到现在已经走过了 60 多年,并且在我们生活中的诸多场景下都得以应用,但在医疗领域却还处于探索阶段。近年来,在各国政策支持与AI、大数据、云服务等前沿技术的驱动下,智慧医疗进入了飞速发展期。当前世界主要国家已纷纷开始对AI进行国家战略层面的布局,并且非常重视其在医疗领域的发展。AI技术在...
(图源:KIST官网)据外媒报道,韩国科学技术研究院(KIST)储能研究中心的Hun-Gi Jung博士及其研究团队宣布,已开发出新型硅负极材料。与石墨负极材料相比,采用这种材料的电池可将容量提升4倍,并且支持快速充电,在5分钟之内充电至80%以上。如果用在电动车动力电池上,预计汽车的续航里程或将增加一倍以上。目前,量产电动汽车电池所用的石墨负极材料...
  因反垄断,苹果又一次被起诉了。  这次控诉的主角还是 App Store。近日,一名开发者向加州圣克拉拉县法院提起诉讼,指控苹果应用商店存在虚假广告、不正当竞争、违反开发者协议等多项违规行为。  这位开发者名为 Kosta Eleftheriou,他在诉状书中说,“APP Store 以牺牲小型应用程序和开发者利益为代价,赚取了数十亿美元的利润”。  ...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved