3366|7

821

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

【 ST NUCLEO-G071RB测评】GPIO [复制链接]

本帖最后由 lising 于 2019-1-6 14:15 编辑

      本次实验使用的NUCLEO-G071RB开发板由https://www.stmcu.com.cn/index.p ... /261/layout/product  提供,更多相关资讯请进入查询。      本次实验包含两项内容:其一利用查询方法检测“USER”按键,控制LD4亮、灭;其二是利用中断方法。
一、实验资源
1、NUCLEO-G071RB开发板;
2、Keil v5.25.2.0;
3、Keil.STM32G0xx_DFP.1.0.0;
4、STM32CubeMX v5.0.1;
5、stm32cube_fw_g0_v100;

二、实验过程
1、软件安装。以上软件的具体安装过程就不说了,Keil及STM32CubeMX都是之前安装好的。由于NUCLEO-G071RB开发板所用微控制器STM32G071RBT6为ST公司新一代的产品,在Keil及STM32CubeMX使用前还必须安装Keil.STM32G0xx_DFP.1.0.0及stm32cube_fw_g0_v100,这两个插件可以直接在应用软件中时行安装,也可以下载后安装。最终如下图所示:



2、第一次实验-采用查询方式检测用户按键(蓝色)“USER”状态,控制LD4的亮、灭。通过原理图可以看出“USER”通过外接上拉电阻与PC13相连,当按键按下检测到PC13出现低电平时点亮LD4、否则熄灭LD4;LD4通过一只N-MOS并受控于PA5引脚,当PA5输出高电平时N-MOS导通,LD4被点亮,反之LD4熄灭;



3、程序实现
      程序主体通过STM32CubeMX生成,方便、快捷、高效。在这里PA5配置为输出模式,初始输出为低电平;PC13配置为输入;时钟选用HSE,处理完这些并经简单设置就可以生成代码了。




      所生成的工程文件被Keil打开后会发现端口及时钟已经配置好了,不用再去理会,只需要在主函数中实现目标功能就是了。下面是功能代码:
  1. /* USER CODE BEGIN WHILE */
  2.   while (1)
  3.   {
  4.                 if(!HAL_GPIO_ReadPin(USER_KEY_GPIO_Port, USER_KEY_Pin))
  5.                 {
  6.                         HAL_Delay(20);
  7.                         if(!HAL_GPIO_ReadPin(USER_KEY_GPIO_Port, USER_KEY_Pin))
  8.                         {
  9.                                 HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_SET);
  10.                                 while(!HAL_GPIO_ReadPin(USER_KEY_GPIO_Port, USER_KEY_Pin));
  11.                                 key_cont++;
  12.                                 if(key_cont==2)
  13.                                 {
  14.                                         key_cont=0;
  15.                                         HAL_GPIO_WritePin(LD4_GPIO_Port, LD4_Pin, GPIO_PIN_RESET);
  16.                                 }                                
  17.                         }        
  18.                 }
  19.     /* USER CODE END WHILE */
复制代码



4、第二次实验-中断法检测按键状态控制LD4亮、灭。利用中断功能可节约大量宝贵资源,并且响应迅速。其实用户按键(PC13)本身就具备了“GPIO_EXTI13”外部中断功能,这次实验利用其产生下降沿产生中断的功能。



5、程序实现
      下面就是功能实现的主要代码,函数内已经按个人的理解加了一些注释,由于能力水平问题所产生的错误还请朋友们给予指教。
a、中断配置函数,该函数在主函数中进行初始化。
  1. /*外部中断配置*/
  2. void EXTI4_15_IRQHandler_Config(void)
  3. {
  4.   GPIO_InitTypeDef   GPIO_InitStructure;

  5.   /*使能GPIOC时钟*/
  6.   __HAL_RCC_GPIOC_CLK_ENABLE();

  7.   /*
  8.         下降沿外部中断;        
  9.         无上、下拉;
  10.         设定PC13引脚;
  11.         完成引脚配置;
  12.         */
  13.   GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
  14.   GPIO_InitStructure.Pull = GPIO_NOPULL;
  15.   GPIO_InitStructure.Pin = USER_KEY_Pin;
  16.   HAL_GPIO_Init(USER_KEY_GPIO_Port, &GPIO_InitStructure);

  17.   /*
  18.         用户按键接PC13端口,即外部中断“EXTI Line 4 to 15 Interrupts”;
  19.         设置中断优先级(0~3),此处设置为最高“0”;
  20.         M0+内核不支持中断子优先级,此处设置为“0”;
  21.         */
  22.   HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);

  23.         /*使能PC13引脚中断*/
  24.   HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);
  25. }
复制代码



b、中断处理函数,该函数在stm32g0xx_it.c随时等待干活儿;
  1. /* USER CODE BEGIN 1 */
  2. void EXTI4_15_IRQHandler(void)
  3. {
  4.   HAL_GPIO_EXTI_IRQHandler(USER_KEY_Pin);
  5. }
  6. /* USER CODE END 1 */
复制代码



c、中断产生后HAL_GPIO_EXTI_IRQHandler(USER_KEY_Pin)会调用HAL_GPIO_EXTI_Falling_Callback(GPIO_Pin)函数,在HAL库中被定义为“弱函数”(__weak void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)),当重新写该函数后就会调入新写的,而“弱函数”就被忽视了。被调用的也被称为“回调函数”;
  1. /*PC13引脚中断回调函数,由中断处理函数调用EXTI4_15_IRQHandler()*/
  2. void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
  3. {
  4.   if(GPIO_Pin == USER_KEY_Pin)//确认PC13产生下降沿脉冲
  5.   {
  6.     HAL_GPIO_TogglePin(LD4_GPIO_Port, LD4_Pin);//LD4端口翻转
  7.   }
  8. }
复制代码


三、实验结果
      两次实验的结果如文前所述。

四、实验总结
      通过所述两个小实验过程的学习,对NUCLEO-G071RB开发板及STM32G071RBT6微控制器又增加了一些新的了解和认识,接下来要接着做更多的实验来进行学习。
      文中的一些描述可能存在一定问题,还请朋友们给予指教。
RM0444_STM32G0x1单片机参考手册.rar (7.39 MB, 下载次数: 15)




此内容由EEWORLD论坛网友lising原创,如需转载或用于商业用途需征得作者同意并注明出处


此帖出自stm32/stm8论坛

最新回复

原理图上不是32.768K的晶振吗  详情 回复 发表于 2024-10-9 16:40
点赞 关注
 

回复
举报

932

帖子

3

TA的资源

纯净的硅(中级)

沙发
 
谢谢楼主分享,正好可以学习借鉴,少走弯路。
此帖出自stm32/stm8论坛

点评

相互学习,共同进步  详情 回复 发表于 2019-1-7 22:11
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
hujj 发表于 2019-1-7 22:00
谢谢楼主分享,正好可以学习借鉴,少走弯路。

相互学习,共同进步
此帖出自stm32/stm8论坛
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

4
 
我参照你帖子里的提示,下载并升级了Keil.STM32G0xx.DFP.1.0.0,但stm32cube_fw_g0_v100这个文件没有找到,请问这个文件在哪下载?起什么作用呢?谢谢了!
此帖出自stm32/stm8论坛
 
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

5
 
stm32cube_fw_g0_v100是STM32CubeMX支持STM32G0系列的插件,有了它的支持STM32CubeMX可配置生成NUCLEO-G071RB的工程文件。可以去ST中文或ST官网下载或直接在STM32CubeMX中安装。
此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

6
 
谢谢楼主指点!已经下载安装了STM32CubeMX软件,正在学习如何使用。
此帖出自stm32/stm8论坛

点评

STM32CubeMX软件很好用,尤其是配置时钟非常省心。  详情 回复 发表于 2019-1-8 19:54
 
 
 

回复

821

帖子

0

TA的资源

一粒金砂(高级)

7
 
hujj 发表于 2019-1-8 15:33
谢谢楼主指点!已经下载安装了STM32CubeMX软件,正在学习如何使用。

STM32CubeMX软件很好用,尤其是配置时钟非常省心。
此帖出自stm32/stm8论坛
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

8
 
原理图上不是32.768K的晶振吗
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表