社区导航

 

搜索
查看: 679|回复: 6

[原创] 【 ST NUCLEO-G071RB测评】GPIO

[复制链接]

809

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2019-1-6 13:09 | 显示全部楼层 |阅读模式
本帖最后由 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,这两个插件可以直接在应用软件中时行安装,也可以下载后安装。最终如下图所示:
QQ截图20190106011225.png
QQ截图20190106114805.png

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

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

      所生成的工程文件被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”外部中断功能,这次实验利用其产生下降沿产生中断的功能。
QQ截图20190106141159.png
QQ截图20190106093255.png

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, 下载次数: 11)


回复

使用道具 举报

616

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2019-1-7 22:00 | 显示全部楼层
谢谢楼主分享,正好可以学习借鉴,少走弯路。

点评

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


回复

使用道具 举报

809

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2019-1-7 22:11 | 显示全部楼层
hujj 发表于 2019-1-7 22:00
谢谢楼主分享,正好可以学习借鉴,少走弯路。

相互学习,共同进步


回复

使用道具 举报

616

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2019-1-8 12:15 | 显示全部楼层
我参照你帖子里的提示,下载并升级了Keil.STM32G0xx.DFP.1.0.0,但stm32cube_fw_g0_v100这个文件没有找到,请问这个文件在哪下载?起什么作用呢?谢谢了!


回复

使用道具 举报

809

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2019-1-8 12:50 | 显示全部楼层
stm32cube_fw_g0_v100是STM32CubeMX支持STM32G0系列的插件,有了它的支持STM32CubeMX可配置生成NUCLEO-G071RB的工程文件。可以去ST中文或ST官网下载或直接在STM32CubeMX中安装。


回复

使用道具 举报

616

TA的帖子

3

TA的资源

纯净的硅(初级)

Rank: 4

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

点评

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


回复

使用道具 举报

809

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

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

STM32CubeMX软件很好用,尤其是配置时钟非常省心。


回复

使用道具 举报

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

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-16 02:33 , Processed in 0.225085 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表