历史上的今天
返回首页

历史上的今天

今天是:2024年08月31日(星期六)

2020年08月31日 | STM32——利用STM32CubeMX来点亮GPIO口的led

2020-08-31 来源:eefocus

GPIO口的 LED 点亮(以STM32F407IGTb芯片为例 )

1、掌握的GPIO口的使用方法


2、熟悉Keil uVision5工具软件的使用


原理:

只要是对硬件操作,就要首先查看原理图。

查看外设是给模块的MCU的哪个引脚相连。

FS-STM32F407开发平台上的LED的亮灭状态,与芯片上的引脚I/O输出电平有关。

FS-STM32F407开发平台上LED的I/O扩展:

在这里插入图片描述

IO操作重要结构体:GPIO_InitTypeDef


typedef struct

{

    uint32_t Pin;               操作的管脚

uint32_t Mode;    模式选择

uint32_t Pull;      上拉下拉,或者都不加

uint32_t Speed;    速度选择

uint32_t Alternate; 管脚复用模式

} GPIO_InitTypeDef;

 

1、Mode


输入(复位状态)/input(reset state)

通用输出模式 / general purpose output mode

复用功能模式 / alternate function mode

模拟模式 / analog mode

 #define  GPIO_MODE_INPUT       ((uint32_t)0x00000000)   /*!< Input Floating Mode */

 #define  GPIO_MODE_OUTPUT_PP  ((uint32_t)0x00000001)   /*!< Output Push Pull Mode*/

 #define  GPIO_MODE_OUTPUT_OD   ((uint32_t)0x00000011)   /*!< Output Open Drain Mode*/

 #define  GPIO_MODE_AF_PP    ((uint32_t)0x00000002)   /*!< Alternate Function Push Pull Mode*/

 #define  GPIO_MODE_AF_OD    ((uint32_t)0x00000012)   /*!< Alternate Function Open Drain Mode*/

 

2、Speed


为了降低STM32处理器的功耗,可以依据实际的需求,选择合适的时钟速率,GPIO口支持的最大时钟速率越低,它产生的功耗也越低。


#define  GPIO_SPEED_LOW                           GPIO_SPEED_FREQ_LOW

#define  GPIO_SPEED_MEDIUM                        GPIO_SPEED_FREQ_MEDIUM

#define  GPIO_SPEED_FAST                          GPIO_SPEED_FREQ_HIGH

#define  GPIO_SPEED_HIGH                          GPIO_SPEED_FREQ_VERY_HIGH

 

3、初始化GPIO的代码


void MX_GPIO_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStruct;

 

  __HAL_RCC_GPIOF_CLK_ENABLE();


  GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9  |GPIO_PIN_10;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);

  HAL_GPIO_WritePin(GPIOF,GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10, GPIO_PIN_SET);

}

 

调用的HAL函数解析: void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx , uint16_t GPIO_Pin, GPIO_PinState PinState);

该函数其实是对BSRR 寄存器进行操作,第一个参数传的是GPIO所在的组,第二个是操作第几个管脚,第三个是对管脚进行置位。


利用STM32CubeMX来架构程序

1、打开STM32CubeMX选择芯片

在这里插入图片描述

2、对管脚进行配置

在这里插入图片描述

3、点击CONFIGURATION

在这里插入图片描述

4、点击生成工程按钮

在这里插入图片描述

源代码:

(仅需要用户添加的代码)


/* USER CODE BEGIN 0 */

#define led1_port GPIOF

#define led1_pin GPIO_PIN_7

#define led2_port GPIOF

#define led2_pin GPIO_PIN_8

#define led3_port GPIOF

#define led3_pin GPIO_PIN_9

#define led4_port GPIOF

#define led4_pin GPIO_PIN_10


#define set_high(p,i) {p->BSRR = i;}     //给高电平 熄灭

#define set_low(p,i) {p->BSRR = (uint32_t)i << 16U;} //给低电平 点亮


#define led1_off set_high(led1_port,led1_pin)

#define led1_no set_low(led1_port,led1_pin)

#define led2_off set_high(led2_port,led2_pin)

#define led2_no set_low(led2_port,led2_pin)

#define led3_off set_high(led3_port,led3_pin)

#define led3_no set_low(led3_port,led3_pin)

#define led4_off set_high(led4_port,led4_pin)

#define led4_no set_low(led4_port,led4_pin)


void led_1234(void);

/* USER CODE END 0 */

.

.

.

/* USER CODE BEGIN 3 */

led_1234();--------------------main函数中调用

  /* USER CODE END 3 */

  .

  .

  .

/* USER CODE BEGIN 4 */

void led_1234(void)

{

led1_no; //led1打开

HAL_Delay(1000); //延时1秒

led1_off; //led1关闭

HAL_Delay(1000); //延时1秒


led2_no; //led2打开

HAL_Delay(1000); //延时1秒

led2_off; //led2关闭

HAL_Delay(1000); //延时1秒

led3_no; //led3打开

HAL_Delay(1000); //延时1秒

led3_off; //led3关闭

HAL_Delay(1000); //延时1秒


led4_no; //led4打开

HAL_Delay(1000); //延时1秒

led4_off; //led4关闭

HAL_Delay(1000); //延时1秒

}

/* USER CODE END 4 */

 

编程要点:

1.使能GPIO端口时钟

2.初始化GPIO目标引脚为推挽输出

3.控制GPIO引脚输出高低电平

推荐阅读

史海拾趣

长工微电子公司的发展小趣事

为了进一步拓展市场,长工微电子积极寻求战略合作。近期,长工微电子与世强先进(深圳)科技股份有限公司签署战略合作协议,授权世强先进全线代理其旗下电源管理IC、开关转换器、多相控制器、降压电源模块、电子保险丝等产品。这一合作有助于长工微电子更好地满足客户需求,提高市场占有率。

振华新云(CEC)公司的发展小趣事

背景:随着电子行业的快速发展,振华新云不断加大技术创新和产品研发力度。

内容:公司积极引进先进技术和设备,加强与国际先进企业的合作与交流。同时,注重培养高素质的技术人才队伍,为技术创新和产品研发提供有力支持。

成果:通过持续不断的技术创新和产品研发,振华新云在电子元器件领域取得了多项重要成果,如开发出具有国际先进水平的钽电解电容器等产品,进一步巩固了公司在行业中的领先地位。

ACT [Advanced Crystal Technology]公司的发展小趣事

背景:为了进一步扩大市场份额和提高品牌影响力,振华新云积极开展市场拓展和国际合作。

内容:公司积极参加国内外电子展会和论坛等活动,加强与国内外客户的沟通和交流。同时,积极寻求与国际先进企业的合作机会,共同开展技术研发和市场推广等活动。

成果:通过市场拓展和国际合作,振华新云的产品逐渐走向世界舞台,赢得了广大客户的信赖和好评。同时,公司也积累了宝贵的国际化经验和资源,为未来的国际化发展奠定了坚实基础。

D3公司的发展小趣事

在环保意识日益增强的今天,D3公司积极响应国家号召,将绿色环保理念融入企业的生产经营中。公司采用环保材料和清洁能源进行生产,减少了对环境的污染。同时,公司还加强了对废弃物的处理和回收利用,实现了资源的循环利用。这种绿色环保的生产方式,不仅降低了企业的生产成本,也提高了企业的社会责任感。在消费者的心中,D3公司也因此树立了环保、负责的良好形象。

B+B SmartWorx公司的发展小趣事

B+B SmartWorx在成立初期便注重全球市场布局,特别是在美国和欧洲市场。通过多年的深耕细作,公司在这些地区建立了广泛的销售渠道和优秀的团队。其产品在美洲市场占据了58%的份额,欧洲市场占28%,其余地区占14%。这种全球布局不仅提升了公司的品牌知名度,也为其后续发展奠定了坚实的基础。

铨力(ALLPOWER)公司的发展小趣事

随着新能源汽车市场的快速发展,铨力公司看到了新的发展机遇。于是,公司开始布局新能源汽车领域,研发和生产新能源汽车所需的电源和充电设备。通过不断创新和拓展市场,铨力在新能源汽车领域也取得了显著的成绩,为公司的发展注入了新的动力。

这五个故事展示了铨力(ALLPOWER)公司在电子行业中的发展历程和取得的成就。从创立初期的太阳能电源产品研发,到技术突破和产品升级,再到国际市场的拓展和产业链整合,以及新能源汽车领域的布局,铨力始终保持着创新的精神和进取的态度,不断推动着公司的发展。

问答坊 | AI 解惑

小电阻测试方法3、DCC电流比较法

假如有两个一样的恒流源,分别接到背靠背的两只电阻上,这样就可以类似电桥那样,通过检测其电压的微小差异,来达到精确的对比的目的。这样就把问题归结到如何精确的产生两个相同的电流的问题上,而这两个电流的绝对值或者少许变动,都对结果影响不 ...…

查看全部问答>

WINCE如何调节VGA接口液晶屏的对比度?

最近项目上碰到个问题。采用2440的处理器,wince5.0系统,原先是直接控制18位色的TTL接口TFT液晶,看了屏的资料,亮度是可以用PWM调节的,编了个简单的驱动,功能基本实现,但是好像不支持对比度调节。可现在要求控制VGA接口的普通台式机的液晶显示 ...…

查看全部问答>

USB网卡驱动问题

我的驱动在XP下运行正常,可是在2000下,通过使用[安全删除硬件]拔除硬件也是正常的,可我直接热插拔时,却出现电脑死机现象.请问这方面XP和2000有什么不同,如何处理??…

查看全部问答>

这些KEIL C51的错误怎么解决?

如果大家谁知道麻烦告诉我一声,因为我这里很多例子程序全是这一个毛病,不知道怎么解决。好心的高手,谢谢了,帮我一下吧 我是第一次学习51用的是C8051F410,大家解说最好也要详细点! *** WARNING L1: UNRESOLVED EXTERNAL SYMBOL  & ...…

查看全部问答>

CC2530 设计资料

好久没有来论坛了  上传个重量级的资料     这个是TI关于CC2530的设计资料  貌似很多人都是拿这个材料做板子的   材料中包括原理图  PCB   材料清单  以及做板子的geber文件    ...…

查看全部问答>

请问大虾如何下载Release版本的程序?

我在调试时下载Release版本的程序,但是出错,说格式不对,不能进行调试,请问大虾如何下载Release版本的程序?谢谢…

查看全部问答>

f2013 usi-iic问题

//send address to sl××e USISRL = 0x40; // ... and transmit address, R/W = 0 USICNT = (USICNT & 0xE0) + 0x08; // Bit counter = 8, TX Address while(bit_is_clear(USICTL1, USIIFG)); ...…

查看全部问答>

易电源测试报告1

测试易电源在空载下的纹波以及带载状态下纹波、能效。 …

查看全部问答>

AD9851模块使用说明

AD9851模块使用说明…

查看全部问答>