社区导航

 

搜索
查看: 141|回复: 5

[原创] 【 ST NUCLEO-G071RB测评】_02_LED灯实验

[复制链接]

14

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2019-1-9 14:33:25 | 显示全部楼层 |阅读模式
本帖最后由 lvxinn2006 于 2019-1-11 08:53 编辑

【实验目的】
  • 熟悉如何通过原理图分析电路原理;
  • 熟悉如何使用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
微信图片_20190109143212.jpg

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

【MCU资源分析与引脚配置】
  • 查看《STM32G071芯片用户参考手册》,在“存储器与总线结构”一章中可以看到如下段落:
微信图片_20190109133942.png
根据段落的提示,可以知道,如果想使用GPIO功能单元,必须要启用相应的时钟。

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


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

  • 在上图中可以看出,每一组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:

微信图片_20190109135145.png

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:

微信图片_20190109135920.png

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

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


【分析总结】把上述所有重点整理成思维导图如下:
微信图片_20190109140514.png

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


【实验代码】

  • 打开Keil并新建项目
打算发大水.png

图片1.png

图片2.png

图片3.png

新建main.c文件
图片5.png

  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. }
复制代码


  • 编译程序
微信图片_20190109142551.png

  • 设置调试器
微信图片_20190109142704.png

微信图片_20190109142851.png
  • 烧写程序
微信图片_20190109142957.png

微信图片_20190109143049.png


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







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






此帖出自stm32/stm8论坛
图片4.png


回复

使用道具 举报

328

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 7 天前 | 显示全部楼层
请问楼主这个《STM32G071芯片用户参考手册》是中文的吗,能分享一下吗?


回复

使用道具 举报

8

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 5 天前 | 显示全部楼层
学习了,楼主能分享下STM32手册吗?


回复

使用道具 举报

14

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 前天 09:15 | 显示全部楼层
hujj 发表于 2019-1-12 11:08
请问楼主这个《STM32G071芯片用户参考手册》是中文的吗,能分享一下吗?

不是中文的,英文

RM0444_STM32G0x1单片机参考手册.rar

7.39 MB, 下载次数: 0



回复

使用道具 举报

14

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 前天 09:15 | 显示全部楼层
Russel99 发表于 2019-1-14 20:45
学习了,楼主能分享下STM32手册吗?

分享了

RM0444_STM32G0x1单片机参考手册.rar

7.39 MB, 下载次数: 0



回复

使用道具 举报

328

TA的帖子

2

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 昨天 09:59 | 显示全部楼层
谢谢楼主!英文版的我在官网已经下载过了,我以为您有中文版的呢。


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

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

GMT+8, 2019-1-19 02:38 , Processed in 0.188761 second(s), 17 queries , Gzip On, MemCache On.

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