历史上的今天
返回首页

历史上的今天

今天是: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之和

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


推荐阅读

史海拾趣

Daito Communication Apparatus Co Ltd公司的发展小趣事

自1948年成立以来,Daito公司一直致力于电子元器件的研发与生产。在公司的早期阶段,他们意识到保险丝在电子设备中的重要性,并决定投入大量资源进行研发。经过数年的努力,Daito公司成功开发出了高精度报警保险丝,这一创新产品凭借其卓越的性能和可靠性,迅速在市场上获得了认可。

高精度报警保险丝的成功并没有让Daito公司停止创新的步伐。他们不断对保险丝的失效原因与寿命进行预测和分析,通过全面质量管理,使产品质量得到了显著的提高。同时,Daito公司还将各系列保险丝的额定值多层次化,以满足不同客户的需求,扩大了顾客的选择余地。

CITIZEN公司的发展小趣事

进入21世纪,西铁城公司在技术创新方面继续取得显著进展。其中,光动能技术的开发是公司历史上的一大里程碑。1995年,西铁城推出了第一只光动能手表,这一技术能够吸收任何可见光源并转化为动能,为腕表提供持续的动力。随后,公司不断对光动能技术进行改进和优化,使其更加精确、高效。这一技术的成功应用,不仅提升了西铁城产品的竞争力,也为整个电子行业带来了新的发展方向。

芯邦(Chipsbank)公司的发展小趣事

芯邦科技自成立以来,一直致力于半导体技术的研发与创新。在指纹识别领域,芯邦于2018年推出了业界首款超低成本、超低功耗的指纹识别控制芯片,该芯片集成了指纹传感器、算法处理器、蓝牙、主控和flash等模块,为指纹识别技术在非手机领域的广泛应用提供了强有力的技术支撑。这一创新不仅展示了芯邦在半导体设计领域的实力,也为其在指纹识别市场赢得了先机。

Diplohmatic A/S公司的发展小趣事

Diplohmatic A/S公司最初是一家小型电子元件分销商,但其创始人对技术创新的执着追求引领了公司的转型。在一次偶然的机会中,公司研发团队发现了一种新型半导体材料,这种材料在能效和稳定性上远超市场同类产品。经过数月的研发和测试,公司成功将这种材料应用于新型电源管理芯片中,并迅速获得了市场的认可。这一创新不仅为公司带来了丰厚的利润,也奠定了其在电子行业的技术领先地位。

Cressall Power Resistors公司的发展小趣事

在电子行业的早期,Cressall Power Resistors公司以其对电阻技术的深入研究而脱颖而出。公司研发团队通过不懈的努力,成功开发出一种新型的功率电阻器,具有更高的耐热性、更低的电阻值变化率以及更长的使用寿命。这一技术突破迅速得到了市场的认可,公司因此获得了大量的订单,业绩迅速增长。随着技术的不断完善和产品的持续升级,Cressall逐渐在功率电阻器市场树立了技术领先的地位。

AAC [American Accurate Components]公司的发展小趣事

随着业务的不断发展和规模的持续扩大,AAC公司在2005年成功在香港交易所上市。这一里程碑式的事件为AAC带来了更多的资本支持和市场认可。此后,AAC加快了全球扩张的步伐,不仅在欧洲、北美等地设立了分支机构,还与众多国际知名品牌建立了长期稳定的合作关系。

问答坊 | AI 解惑

可编程控制器在汽车转向泵自动装配线中的应用

汽车转向泵是一种中高档汽车的零部件,它由多种零件组成,需要借助不同的设备,按照一定的工序把它们组装起来。在整个过程中,不仅要完成基本的装配,还要对过程中诸如压力、位移、时间等参数进行实时监控,以满足工艺所提出的严格要求,保证装配质 ...…

查看全部问答>

思路决定出路--键盘扫描详解

按键扫描是每个搞单片机的都会遇到的问题,也是一个开发人员必须具备的基本功。先从最基本的说起。在此声明,没有代码,也不要向我要代码,也不想穿裤子,如果你看了帖子还写不出代码,那么我只能说你太笨了。。。。。。。。还是那句话,搞开发重要 ...…

查看全部问答>

单片机高手进,花钱找人编程

我想变成程序,但不知道要多少钱,请高手个价位 仪器的功能大概如下;1,压力传感器测得压力显示在数码管上,另外可以对通过对标定对传感器进行微调                     &nbs ...…

查看全部问答>

wince 6.0 IO 扫描键盘驱动

各位大哥:     最近在研究用 IO 来做键盘,     有几个问题不明白,     1、很多IO键盘驱动都是使用中断来实现,比如 4X4 的要 4 个中断,首先创建一个事件,然后启动一个线程,        通 ...…

查看全部问答>

編寫S3C2440總線方式控制的流式驅動程序問題

我想用nGCS2作片选,LDADDR0-LDADDR7作地址线,LDDATA0-LDDATA7作数据线进行CPLD的读写数据.于是我定义了下面的结构体: #define NGCS2_BASE     0XA4000080 #define NGCS2_PHY_BASE 0x10000080 ///定义CPLD控制寄存器地 ...…

查看全部问答>

请教关于PRO/E野火版的安装问题

大家好:     请问PRO/E野火版怎么安装?安装时要把什么来代替一下吗?本来想把安装的界面的图传上来不知道怎么搞,还是请大家帮忙看下 1. boot up your pc with windows 2. start pro/e setup 3. open ptc_licfile.dat with your fa ...…

查看全部问答>

求教周立功DP-51RPO型单片机综合仿真实验仪中KS0108B液晶汉字显示C编程

求教周立功DP-51RPO型单片机综合仿真实验仪中KS0108B液晶汉字显示C编程…

查看全部问答>

修改防盗器的振动传感部份

有那位高手设计过(加速度传感器用来检测汽车防盗器的振动传感,)…

查看全部问答>

单片机的系列比较---M0与M3

Cortex-M3和Cortex-M0的区别   ARM架构自v6开始分为A/R/M三个系列。CM0/CM3都是属于M系列的。CortexM0是基于v6架构;CortexM3是v7架构。主要区别 性能: Cortex-M0 基于32 位架构,利用一个 通过MULS 指令直接与内核相连的3 ...…

查看全部问答>

按键的硬件去抖动

1>并联电容法——电容放电延时   SW1未被按下时,P0.20上是高电平,C1右侧是VCC,左侧是0。SW1被按下时,C1两侧会放电延时,C1右侧的正电荷越来越少,直到P0.20上是低电平,SW1抖动,貌似弹起,C1右侧的正电荷会增加一点,但时间很短暂, ...…

查看全部问答>