lvxinn2006

  • 2019-03-18
  • 加入了学习《正点原子手把手教你学STM32-M4》,观看 开发环境搭建

  • 加入了学习《正点原子手把手教你学STM32-M4》,观看 开发板入门

  • 2019-01-23
  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_08_PWM定时器控制三色LED实验

    okhxyyo 发表于 2019-1-22 21:29 颜色很好看。赞赞赞
    透过一层纸,看起来有点像不同颜色的月亮:)

  • 2019-01-22
  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_08_PWM定时器控制三色LED实验

    RCSN 发表于 2019-1-22 10:37 1、楼主使用寄存器操作值得赞一波,这样在评测中更能深入了解这块MCU 2、楼主为何不妨使用下cubemx?或者 ...
    评测芯片,从底层寄存器角度出发,才能看清与其他芯片的区别,如果寄存器没问题,再使用库函数会感觉简单很多。最重要的是,项目太小,几行代码实现的功能,细节自己把控。

  • 发表了日志: 【 ST NUCLEO-G071RB测评】_08_PWM定时器控制三色LED实验

  • 发表了主题帖: 【 ST NUCLEO-G071RB测评】_08_PWM定时器控制三色LED实验

    本帖最后由 lvxinn2006 于 2019-1-22 17:15 编辑 本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!https://www.stmcu.com.cn/Product/pro_detail/cat_code/STM32G0/family/81/sub_family/261/layout/product 【实验目的】· 掌握PWM定时器的原理与使用· 掌握PWM在控制LED亮度功能上的应用 【实验环境】· NUCLEO-G071RB开发板· 三色LED灯模块· Keil MDK-ARM(Keil uVision 5.25.2.0)· Keil.STM32G0xx_DFP.1.0.0.pack 【实验资料】· NUCLEO-G071RB开发板原理图· STM32G071x8/xB Data Sheet· STM32G071芯片用户参考手册 【实验分析】1、电气连接关系红色R LED        ——> PC9绿色G LED        ——> PC8蓝色B LED        ——> PC10 2、GPIO引脚配置 由上图可知,PC8、PC9、PC10三个引脚分别对应着TIM1_CH1、TIM1_CH2、TIM1_CH3,所以需要把三个引脚都配置成AF2模式。所以需要把这三个引脚配置成响应的AF模式,即AF2。 3、启用TIM1定时器 如图设置,可以通过配置[11]位启用TIM1的时钟。 4、配置定时器高级控制定时器(TIM1)由一个可编程的预分频器驱动的16位自动重装计数器组成,可用于多种用途,包括测量输入的脉冲长度。输入信号的捕获,或输出波形(包括输出比较,PWM,死区插入互补的PWM)。脉冲长度和波形周期可以在几微秒内进行调制。通过设定定时器预分频器和RCC时钟控制器,可以将定时器的工作时钟周期控制在毫秒级别。高级控制定时器(TIM1)和通用定时器器是完全独立的,不共享任何资源。高级控制定时器原理如下: 本实验主要使用该定时器产生PWM信号,通过控制PWM占空比,使用不同占空比的信号,驱动三个颜色的LED灯,以控制三个LED灯的亮度等级,就可以搭配出不同颜色。在定时器输出PWM信号的应用中,最重要的寄存器有:ARR                ——计数重载寄存器,决定了PWM的周期;CCRx        ——比较匹配寄存器,决定了不同引脚的PWM占空比;CNT                ——定时器计数器,定时器计数器可以自增或自减,变化的过程中,不断与CCRx进行比较,一旦CNT达到CCRx的值时,就可以驱动响应的输出引脚发生电平的反转。 关于PWM相关配置的描述如下: 【实验代码】#include "stm32g0xx.h"                  // Device header #include void mdelay(int ms) {         RCC->APBENR1 |= RCC_APBENR1_TIM6EN;        //使能TIM6         TIM6->PSC = SystemCoreClock / 1000 - 1;        //预分频 定时器时钟为1000Hz         TIM6->ARR = ms;        //周期数         TIM6->CR1 |= TIM_CR1_OPM;        //单次脉冲模式         TIM6->CR1 |= TIM_CR1_CEN;        //启动定时器         while(TIM6->CR1 & TIM_CR1_CEN);        //等待定时器结束 } void rgb_init(void) {         /* 初始化IO引脚 */         RCC->IOPENR |= RCC_IOPENR_GPIOCEN;        //使能GPIOC         GPIOC->MODER &= ~(0x3F

  • 2019-01-18
  • 发表了日志: 【 ST NUCLEO-G071RB测评】_07_触摸按键实验

  • 发表了主题帖: 【 ST NUCLEO-G071RB测评】_07_触摸按键实验

    本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!https://www.stmcu.com.cn/Product/pro_detail/cat_code/STM32G0/family/81/sub_family/261/layout/product 【实验目的】· 掌握使用GPIO中断的使用 【实验环境】· 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芯片用户参考手册 【实验分析】原理图: 连接如图所示,灰色线连接到电源的负极,黑色线连接到3.3V正极,白色是信号线,连接到了PC10引脚。触摸按键模块的原理比较简单,通过电容感应,当没有感应到电容变化时,信号线会一直保持低电平,当触摸感应区域时,信号线会变成高电平。因此,可以直接使用外部中断功能进行按键状态的判断,使用上升沿触发中断。 【实验代码】#include "stm32g0xx.h"                  // Device header void GPIOSetDir(GPIO_TypeDef *GPIO, int pin, int dir) {         if (dir == 0){                 GPIO->MODER        &= ~(0x3UL

  • 2019-01-17
  • 发表了日志: 【 ST NUCLEO-G071RB测评】_06_

  • 发表了主题帖: 【 ST NUCLEO-G071RB测评】_06_DHT11温湿度传感器实验

    本帖最后由 lvxinn2006 于 2019-1-17 11:00 编辑 本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!https://www.stmcu.com.cn/Product/pro_detail/cat_code/STM32G0/family/81/sub_family/261/layout/product【实验目的】· 掌握DHT11的通信时序· 掌握使用GPIO处理通信时序 【实验环境】· NUCLEO-G071RB开发板· DHT11温湿度模块· Keil MDK-ARM(Keil uVision 5.25.2.0)· Keil.STM32G0xx_DFP.1.0.0.pack· 串口调试助手 【实验资料】· NUCLEO-G071RB开发板原理图· STM32G071x8/xB Data Sheet· STM32G071芯片用户参考手册· DHT11用户手册 【实验分析】原理图: 连接如图所示,灰色线连接到电源的负极,黑色线连接到3.3V正极,白色是数据线,连接到了PC10引脚。DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先出。数据格式::8bit 湿度整数数据 + 8bit 湿度小数数据+8bit 温度整数数据 + 8bit 温度小数数据+8bit 校验位。校验位数据定义:“8bit 湿度整数数据 + 8bit 湿度小数数据+8bit 温度整数数据 + 8bit 温度小数数据”8bit 校验位等于所得结果的末 8 位。 数据时序图用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,幵触发一次信采集。信号发送如图所示:外设读取步骤主机和从机之间的通信可通过如下几个步骤完成(外设(如微处理器)读取 DHT11 的数据的步骤)。步骤一:DHT11 上电后(DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,幵记录数据,同时 DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平;此时 DHT11 的DATA 引脚处于输入状态,时刻检测外部信号。步骤二:微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms,然后微处理器的 I/O设置为输入状态,由于上拉电阻,微处理器的 I/O 即 DHT11 的 DATA 数据线也随之变高,等待 DHT11 作出回答信号,发送信号如图所示: 步骤三:DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后 DHT11 的 DATA引脚处于输出状态,输出 80 微秒的低电平作为应答信号,紧接着输出 80 微秒的高电平通知外设准备接收数据,微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11 回应信号)后,等待 80 微秒的高电平后的数据接收,发送信号如图所示:步骤四:由 DHT11 的 DATA 引脚输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据,位数据“0”的格式为: 50 微秒的低电平和 26-28 微秒的高电平,位数据“1”的格式为: 50 微秒的低电平加 70微秒的高电平。位数据“0”、“1”格式信号如图所示: 结束信号:DHT11 的 DATA 引脚输出 40 位数据后,继续输出低电平 50 微秒后转为输入状态,由于上拉电阻随之变为高电平。但 DHT11 内部重测环境温湿度数据,幵记录数据,等待外部信号的到来。 【实验代码】#include "stm32g0xx.h"                  // Device header #include "uart.h" #include void mdelay(int ms) {         RCC->APBENR1 |= RCC_APBENR1_TIM6EN;        //使能TIM6         TIM6->PSC = SystemCoreClock / 1000 - 1;        //预分频 定时器时钟为1000Hz         TIM6->ARR = ms;        //周期数         TIM6->CR1 |= TIM_CR1_OPM;        //One Pulse mode         TIM6->CR1 |= TIM_CR1_CEN;        //启动定时器         while(TIM6->CR1 & TIM_CR1_CEN);        //等待定时器结束 } void GPIOSetDir(GPIO_TypeDef *GPIO, int pin, int dir) {         if (dir == 0){                 GPIO->MODER        &= ~(0x3UL

  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_05_系统时钟配置以及串口实现的俄罗斯方块游戏

    hotsauce1861 发表于 2019-1-14 09:42 哈哈,这个很强,mobaxterm作为串口终端,使用整页刷新的那个指令吗?如果用串口助手应该不行吧。
    串口助手不支持VT控制码,用串口助手的话,能看到原始的控制码数据

  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_05_系统时钟配置以及串口实现的俄罗斯方块游戏

    lehuijie 发表于 2019-1-13 17:16 这可以刷吗?,能消除方块?
    使用VT终端控制码,可以操作字符的位置,前景色和背景色,当然可以消除方块

  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_02_LED灯实验

    Russel99 发表于 2019-1-14 20:45 学习了,楼主能分享下STM32手册吗?
    分享了

  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_02_LED灯实验

    hujj 发表于 2019-1-12 11:08 请问楼主这个《STM32G071芯片用户参考手册》是中文的吗,能分享一下吗?
    不是中文的,英文

  • 2019-01-10
  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_04_UART实验

    freebsder 发表于 2019-1-10 22:38 看前面想起自己上学的时候,呵呵。加油。
    哈哈,就是按照学校实验手册的形式写的:lol

  • 发表了日志: ST NUCLEO-G071RB测评_05_系统时钟配置以及串口实现的俄罗斯方块游戏

  • 发表了主题帖: 【 ST NUCLEO-G071RB测评】_05_系统时钟配置以及串口实现的俄罗斯方块游戏

    本帖最后由 lvxinn2006 于 2019-1-11 08:55 编辑 本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持!https://www.stmcu.com.cn/Product/pro_detail/cat_code/STM32G0/family/81/sub_family/261/layout/product【实验目的】· 掌握串口的使用· 掌握系统时钟的配置· 掌握俄罗斯方块游戏实现逻辑 【实验环境】· NUCLEO-G071RB开发板· Keil MDK-ARM(Keil uVision 5.25.2.0)· Keil.STM32G0xx_DFP.1.0.0.pack· MobaXterm、Putty、SecureCRT、XShell等超级终端软件 【实验资料】· NUCLEO-G071RB开发板原理图· STM32G071x8/xB Data Sheet· STM32G071芯片用户参考手册 【实验分析】在上一个UART串口实验的基础上,增加俄罗斯方块的功能逻辑,这里面包含了很多C语言算法,以及终端控制码的使用,内容比较复杂,这里提供了程序代码供有兴趣的读者自行参考。在这个实验中主要用到了两个额外的处理器功能1、主系统时钟提高到64MHz的配置2、Systick节拍定时器的使用 64MHz主时钟的配置主要用到了芯片的RCC单元,RCC单元主要用来控制整个芯片系统各个功能单元的复位与时钟的控制,这里主要用到了时钟控制。对时钟的控制基础主要依赖于系统的时钟树,与系统主频相关的部分如下图所示:实际上也就是需要通过各种设置,使SYSCLK的时钟频率达到64MHz。根据时钟图以及对芯片使用手册的查阅,可知系统默认使用的是内部的16MHz的RC振荡电路提供的时钟,即HSI16,且经过分频器后(默认未分频),变为HSISYS,主时钟SYSCLK选择器默认选择HSISYS为主时钟源,默认的主时钟SYSCLK频率也就是16MHz。根据对STM32G071芯片的了解,SYSCLK主时钟最大支持的频率为64MHz,SYSCLK作为系统的主时钟,给CPU内核、大部分外围设备提供时钟源。该芯片使用Cortex-M0+体系结构的CPU内核,以HCLK为工作时钟,最大主频可以运行到64MHz。综上,我们如果想发挥处理器的最大性能,需要提高SYSCLK到可支持的最大频率64MHz。在时钟部分,系统中有一个PLL部件,主要功能是提高时钟频率,输入一个低频率的时钟信号,输出一个高频率时钟信号,在图中可以看到,PLL可以选择HSE或HSI16为时钟源,在我们的开发板中,只能使用HSI16,所以这部分需要进行单独配置,整个PLL相关的配置,都在寄存器PLLCFGR中:在这个寄存器中,主要关心的就是几个数值M、N、P、Q、R,结合时钟树以及寄存器的公式描述,能够很清楚的了解每个位段的作用。这里最重要的两个参数就是M和N,这两个决定了锁相环PLL内部fvco的频率,三路的输出时钟都以这个频率为基准进行分频,所以需要对M和N进行合理取值。 配置完PLL参数后,需要启动PLL,主要使用了RCC_CR寄存器需要开启[24]位,并且需要通过检测[25]位来检测PLL是否正常工作。一切正常以后,就可以把SYSCLK时钟源切换到PLLRCLK了,主时钟源的选择主要用到了RCC_CFGR在这里设置[2:0]=010 (0x2)即可选择主时钟为PLLRCLK,时钟切换成功后,可以通过读[5:3]验证时钟是否切换成功。 综上所述,时钟配置函数实现如下: /* 配置64MHz系统时钟 */ void SystemClockConfig(void) {         //Fvco1 = 16 * 32 / 4 = 128         RCC->PLLCFGR = (0x2

  • 回复了主题帖: 【 ST NUCLEO-G071RB测评】_04_UART实验

    lising 发表于 2019-1-10 18:12 不错,学习了!
    互相学习,我这直接配寄存器的方法可能看起来比较笨

  • 发表了日志: ST NUCLEO-G071RB测评_04_UART实验

  • 发表了主题帖: 【 ST NUCLEO-G071RB测评】_04_UART实验

    本帖最后由 lvxinn2006 于 2019-1-11 08:55 编辑 本次活动测评开发板ST NUCLEO-G071RB由ST意法半导体提供,感谢意法半导体对EEWorld测评的支持! https://www.stmcu.com.cn/Product/pro_detail/cat_code/STM32G0/family/81/sub_family/261/layout/product 【实验目的】 · 掌握GPIO复用功能的配置方法· 掌握USART中断的使用· 理解USART串口使用的基本原理 【实验环境】· 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芯片用户参考手册 【实验分析】· 查看原理图在NUCLEO-G071RB中,最方便使用的UART串口就是UART2,直接连接到了ST_LINK的虚拟串口,原理图如下: 现就以UART2为例,一步一步实现串口的通信。根据原理图中的PORT,可以找到TX和RX引脚所对应的GPIO引脚,TX-->PA2, RX-->PA3,如下图所示: · 查看STM32G071芯片用户参考手册 启用GPIO时钟与前面实验一样,使用GPIO端口之前,需要先开启时钟,这里使用了GPIOA,所以需要将RCC_IOPENR的[0]位置1,原理如下图所示: 设置GPIO引脚功能开启GPIOA的时钟以后,设置GPIO的功能,即设置GPIOA_MODER寄存器,根据参考手册,MODER寄存器定义如下:对应PA2和PA3引脚的位置分别位于[5:4]、[7:6]四个位中,在位段的描述说明中,可以看到00为输入模式,01为通用输出模式,10为复用功能模式,根据应用需求,我们需要把PA2和PA3作为UART的Tx和Rx来使用,所以我们需要把MODER[5:4][7:6]都配置成10,即复用功能模式(AF) 当MODER寄存器配置为AF模式时,需要使用AFRL、AFRH两个寄存器对引脚功能进行进一步设置,寄存器定义如下:在这个寄存器中,每4个位控制一个引脚的功能,PA2引脚的功能位于[11:8]四个位中,PA3引脚的功能位于[15:12]四个位中,每4个位中0000~0111共8个组合表示引脚的8种功能,这里把对应的值用AF0~AF8来表示,每个引脚对应的值,所对应的功能也不同,下表描述的是引脚AF值所对应功能,其中PA2的AF1表示USART2_TX,PA3的AF1表示USART2_RX功能至此,我们基本就确定了AF寄存器的配置方法,需要把[11:8]配置为0x1 (0001:AF1),[15:12]也配置为0x1 (0001:AF1)。这样,PA2和PA3的引脚功能就配置好了,接下来就需要配置USART外设模块了。 启用USART2时钟USART连接在系统的APB总线,所以USART的时钟控制,在APBENR1中,如下图所示:需要把寄存器的[17]位置位,即可开启USART2的时钟。 使能USART2模块USART寄存器比较多,但是大多数默认参数已经满足需求,我们需要设置的寄存器并不多,首先要配置CR1寄存器,重点要设置下图所示的三个数据位:寄存器中的[3][2]两个位用来使能Tx和Rx,[0]位用来使能USART设备,[5]位用来启用接收数据中断。 设置波特率 波特率的计算方法计算方法详见文档。本人根据文档,总结了一个公式,可以直接用在代码中:        //Baudrate         = Fclk/(16*USARTDIV)        //USARTDIV        = Fclk / Baudrate / 16        //                                        = 16000000 / 115200 / 16        //                                        = 8.68        temp = SystemCoreClock * 100 / baud / 16;        brr = ((temp / 100)<<4) | ((temp%100) * 16 / 100) + (((temp%100) * 16 / 100)%100)/50;        USART2->BRR = brr; 串口的初始化函数实现void UART2_Init(int baud) {         uint32_t temp;         uint32_t brr;         RCC->IOPENR |= (1

最近访客

< 1/2 >

统计信息

已有34人来访过

  • 芯币:48
  • 好友:--
  • 主题:8
  • 回复:8
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言