STM32CubeMX系列 | 跑马灯

发布时间:2023-03-20  

跑马灯

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


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

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    西门子Smart200PLC的跑马灯程序解析;1. 控制要求: 要求每隔1秒八盏灯其中的一盏亮一次,这样循环点亮, 2. PLC的IO分配: (PLCIO点分配) 我案例是M30.0为启......
    ); } 在main.c函数中编写跑马灯程序(注意编写的程序应该在相应的USER CODE范围内,否则再次使用CubeMX修改配置时,USER CODE范围之外的程序会被清除) int main......
    用C语言写一个跑马灯程序;#define MAIN_Fosc 22118400L //定义主时钟 #include "STC15Fxxxx.H" /********* 功能说明 ***程序......
    看出采用先对初始状态移位再取反的方式.可以得到想要的跑马灯8种状态,从而实现跑马灯的显示。   程序如下:   #include<reg51.h>   void delay0   { unsigned......
    功能。如表2所示。   比较表1和表2的状态.可以看出采用先对初始状态移位再取反的方式.可以得到想要的跑马灯8种状态,从而实现跑马灯的显示。   程序如下: 通过上述程序可以看出.移位法通过对二进制数进行移位之后再取反的方式来得到跑马灯......
    八路LED跑马灯实验;现在让我们开始做第一个实验:八路发光二极管轮流点亮的实验,也就是通常所说的跑马灯实验,首先让我们来完成必须的硬件部分,我们需要焊接上8个发光二极管和8个限流电阻,可以......
    基于STM32的跑马灯实验的详细解析;我们用C语言来再学习STM32,以加深理解,并且应用相关资料和官方固件标准库。因此,我们来编写一个跑马灯实验 先前准备 一, 开发环境 安装MDK5,并且......
    80C51单片机-LED流水灯效果(汇编版);本文将介绍一个基于8051单片机的跑马灯实验,通过编写汇编代码实现LED流水灯效果。这个实验将使用8051单片机的P2口来控制8个LED灯,实现......
    跑马灯实验用汇编语言和C51语言做出的不同效果;当前开发单片机应用系统程序主要应用汇编语言和C51语言,采用汇编语言编写可直接操纵系统的硬件资源,能编写出高效运行的程序代码,程序运行速度快。而采......
    连续运算的第二次符号输入时,即可输出上两个数字的运算结果。 第三,按下等号键,输出前两个数字的运算结果,并且可以继续输入符号和数字进行计算,而不代表结束。 第三,按下清零键会有跑马灯提示已经清空。 第四,数码......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>