注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题

lvxinn2006的个人空间 http://home.eeworld.com.cn/space-uid-757599.html [收藏] [复制] [分享] [RSS]

日志

ST NUCLEO-G071RB测评_02_LED灯实验

已有 112 次阅读2019-1-9 14:33 |个人分类:MCU

【实验目的】
  • 熟悉如何通过原理图分析电路原理;
  • 熟悉如何使用MCU的用户参考手册;
  • 通过本实验掌握 GPIO 输出功能的使用方法;
  • 初步熟悉单片机寄存器的配置方法;
  • 用最少的代码点亮LED灯。

【实验环境】
  • NUCLEO-G071RB开发板
  • Keil MDK-ARM(Keil uVision 5.25.2.0)
  • Keil.STM32G0xx_DFP.1.0.0.pack

【实验资料】
  • NUCLEO-G071RB开发板原理图
  • STM32G071x8/xB Data Sheet
  • STM32G071芯片用户参考手册

【实验现象】
  • 点亮LD4


【原理图分析】
  • 打开原理图,并找到LD4所在位置;

  • 分析原理,LD4阳极接3.3V正电压,阴极连接到N沟道场效应管T2的漏极,场效应管T2的源极连接到电源地;
  • 点亮LD4的条件:当场效应管导通时,LD4阴极直接连接到地,产生电流,即可点亮LD4;
  • 场效应管栅极通过1M电阻下拉到地,当Vds之间产生电压差时,即可使场效应管导通,即当栅极接高电平(3.3V)时,Vds=-3.3V,即可使场效应管导通,进而点亮LD4。
  • 在原理图中可知,场效应管的栅极连接到了PA5引脚,所以只需要使PA5输出高电平,即可点亮LD4。
  • 接下来,根据芯片参考手册,对PA5引脚进行配置。

【MCU资源分析与引脚配置】
  • 查看《STM32G071芯片用户参考手册》,在“存储器与总线结构”一章中可以看到如下段落:

根据段落的提示,可以知道,如果想使用GPIO功能单元,必须要启用相应的时钟。


在这里可以看到,RCC_IOPENR寄存器,可以控制GPIO功能的时钟,而且能够知道,GPIOA的时钟,在寄存器的[0]位上,只需要将[0]位置1即可
  • 通过查看STM32G071芯片的Data Sheet,可以知道在这一系列的处理器中,有PA、PB、PC、PD、PF共5组GPIO



  • 对于尾号R系列64pin的芯片,有多达60个引脚作为GPIO使用


  • 在上图中可以看出,每一组GPIO都有很多引脚,64pin的芯片可用的GPIO有PA0…PA15,PB0…PB15,PC0…PC15,PD0…PD9,PF0…1总共60个引脚
  • 查询数据手册可以了解到,芯片中每个GPIO分组都对应相同功能的若干寄存器,寄存器具体功能如下表所示:

寄存器分类具体寄存器功能描述
配置寄存器
GPIOx_MODER设置输入/输出模式
GPIOx_OTYPER设置输出类型(推挽、开漏)
GPIOx_OSPEEDR设置输出速度
GPIOx_PUPDR设置内部上下拉电阻
数据寄存器
GPIOx_IDR输入数据
GPIOx_ODR输出数据
置位复位寄存器
GPIOx_BSRR设置、清除数据
锁定寄存器
GPIOx_LCKR锁定引脚数据状态
复用功能选择寄存器
GPIOx_AFRH复用功能高位数据
GPIOx_AFRL复用功能低位数据



每个寄存器都有各自的功能,寄存器具体定义请参考《STM32G071芯片用户参考手册》关于GPIO的章节。
  • 本实验原理比较简单,只用到了MODER和ODR两个寄存器,所以我们只研究这两个寄存器的使用
  • 先看一下GPIOx_MODER:

MODER寄存器主要用来设置一个GPIO组中每个IO引脚的功能,寄存器中每2个数据位决定了1个引脚的功能,比如:[1:0]位控制了PA0引脚的功能,[3:2]位控制了PA1引脚的功能……

根据实验的需求,我们想用PA5输出高电平控制LD4,所以我们需要设置PA5对应的位置,也就是[11:10]两位。

在说明中,能看到,两个二进制的不同组合,可以决定引脚的功能,00表示输入模式,01表示输出模式,10表示复用功能模式,11是模拟模式。

因为我们想用PA5往外输出电平信号控制电路,所以我们需要把PA5设置成输出模式,也就是要把[11:10]两位设置成01即可。



  • 再看一下GPIOx_ODR:

当GPIO引脚被设置成输出模式时,ODR寄存器相应数据位上的值,会决定引脚输出的电平,1为高电平,0为低电平。

根据实验需求,需要让PA5输出高电平,所以需要把GPIOA_ODR寄存器中的[5]位设置为1即可。


【分析总结】把上述所有重点整理成思维导图如下:


接下来要做的,就是把这些细节,用程序代码表示出来。


【实验代码】

  • 打开Keil并新建项目








新建main.c文件


  1. #include "stm32g0xx.h"                  // Device header

  2. int main(void)
  3. {
  4.         //使能GPIOA的时钟
  5.         RCC->IOPENR |= (1<<0);        
  6.         //设置PA5为输出模式
  7.         GPIOA->MODER &= ~(0x3<<10); //[11:10]清0
  8.         GPIOA->MODER |= (1<<10);        //[11:10]=01 设置PA5为输出模式
  9.         
  10.         //点亮LD4
  11.         GPIOA->ODR |= (1<<5);        //[5]=1 PA5输出高电平
  12. }
复制代码


  • 编译程序


  • 设置调试器



  • 烧写程序





  • 按复位按键,运行程序,并查看实验结果。







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






本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

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

GMT+8, 2019-3-22 04:03 , Processed in 0.033537 second(s), 11 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2019 http://bbs.eeworld.com.cn/

返回顶部