3905|10

932

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

【ST NUCLEO-G071RB评测】+ 我的评测过程 [复制链接]

 
本帖最后由 hujj 于 2019-1-9 10:45 编辑

本评测使用的
ST NUCLEO-G071RB
开发板来自EEWORL论坛,以下是STM产品的链接:



    这几天一直都在忙于查看资料,在之前整理了芯片引脚排列资料的基础上,还将芯片用户手册的目录和部分内容通过百度翻译整理成了中文,以弥补本人英文水平低的缺陷,以后使用起来就方便多了。
    这是整理后的数据手册目录:
stm32g07x数据手册(目录).docx (1.25 MB, 下载次数: 20)


    另外查找到了开发板扩展引脚排列图,并转换成PDF文件:
开发板引脚图.pdf (1.54 MB, 下载次数: 42)


    开发项目的模板也建立好了,平台采用Keil MDK,将下载的模板复制到工程目录,通过了编译。



    下一步就准备先将LCD5110驱动起来,以便作其它测试,测试过程会在后续贴中陆续分享给大家。





此帖出自stm32/stm8论坛

最新回复

怎么下载程序的  详情 回复 发表于 2019-3-14 11:53
点赞 关注(1)
 

回复
举报

932

帖子

3

TA的资源

纯净的硅(中级)

沙发
 
    经过阅读坛友lising的帖子https://bbs.eeworld.com.cn/thread-1066453-1-1.html,发现我移植的工程模板虽然编译能通过,但似乎还存在问题:一是MCU的选择我仅能选到"ARMCM0",不能选择到具体的型号(参见下图),另外对应的晶振频率是12.0M,不是开发板上实际的8M。为此,我在STM32社区另一个坛友的帖子里下载了“STM32G0xx_DFP.1.0.0.pcack"升级包,运行之后再重新移植项目,发现这些设置完全正确了。



    下图是升级之后重建项目的相关设置:

    之后才发现只要点击窗口内pack下面的链接,就可以直接在keil的官网上查找和下载相关的升级包。
    重新建立的项目晶振设置已经是正常的8MHz(见下图)。



    重新移植项目之后,照例又要重新设置相关文件的路径和包含搜索路径,参见下图:



    我不明白的是为什么原来设置的路径用的是正斜杠,我开始也照此修改,但无效,后来点击末尾的搜索按钮生成的路径全是反斜杠。
    修改了包含文件的搜索路径之后,还要修改固件库文件的路径,如下图所示:




    文件路径修改相对简单,只要点击右键,选择弹出菜单的第一行,然后设置成新项目文件的路径就行。




    修改之后再试编译,这次应该是真正完成了开发平台的建立。
此帖出自stm32/stm8论坛
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

板凳
 
    在坛友lising的指点下,我下载并安装了STM32CubeMX软件,下面是软件的主要界面:
    这是引脚和配置界面,双击左边列表中的选项,选中需要使用的功能,右边的MCU引脚图会对应显示相应要使用的引脚。


    也可以选择用框图方式显示:


    这是系统时钟配置界面:


    这是项目相关参数的设置界面,可以按照自己的需要进行定制。


    最后一个是工具界面。

  
    进入这个软件时可以先建立项目,指定项目保存的位置,选择好MCU的型号规格以及开发平台。设置好所需的功能之后点击右上部的GENERATE CODE就可以自动生成项目文件,然后再用相应的开发平台打开,不需要再进行基本的配置就可以在这个基础上写代码了。
    使用这个软件可以保证相应功能的设置不会遗漏或错误,对象我一样的初学者来说有帮助。目前对这个软件的操作还不熟悉,还在学习摸索过程中。
此帖出自stm32/stm8论坛
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

4
 
    这几天都在熟悉STM32CubeMX软件,通过软件建立的模板,参考坛友lising的相关帖子,试验了通过按键控制LED灯闪烁的频率,按键检测采用中断方式,在主程序中定义一个变量,每次检测到按键时变量自加125毫秒,超过1000毫秒时又从125毫秒开始。在主程序while()循环里先对LED灯翻转,然后按照这个变量值进行延时。下面是主程序:
  1. int main(void)
  2. {
  3.        
  4.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  5.     HAL_Init();

  6.     /* USER CODE BEGIN Init */

  7.     /* USER CODE END Init */

  8.     /* Configure the system clock */
  9.     SystemClock_Config();

  10.     /* Initialize all configured peripherals */
  11.     MX_GPIO_Init();
  12.     MX_USART1_Init();
  13.     MX_I2C2_Init();
  14.     MX_SPI1_Init();
  15.         systick_init();
  16.        
  17.         led_flag = 0;
  18.         LCD_init();
  19.         LCD_clear();
  20.         scree_start();

  21.         while (1)
  22.     {
  23.                 HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);    //LD4端口翻转
  24.         delay_ms(led_time);
  25.         
  26.     }

  27. }
复制代码


这是按键的处理函数,每次按键中断变量 自增125毫秒。

  1. /****************************************************************
  2. * 中断回调函数,
  3. * 接收中断处理函数调用EXTI4_15_IRQHandler()传递的中断引脚号     *
  4. ****************************************************************/
  5. void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
  6. {
  7.     if(GPIO_Pin == KEY0_Pin)   //确认PC13产生下降沿脉冲
  8.     {
  9.                 led_time = led_time + 125;
  10.                 if(led_time > 1000) led_time = 125;
  11.     }
  12. }
复制代码


下面是GPIO引脚定义和按键中断配置的函数:
  1. void MX_GPIO_Init(void)
  2. {
  3.     GPIO_InitTypeDef   GPIO_InitStructure;
  4.        
  5.         /* GPIO Ports Clock Enable */
  6.     __HAL_RCC_GPIOA_CLK_ENABLE();
  7.     __HAL_RCC_GPIOC_CLK_ENABLE();
  8.     __HAL_RCC_GPIOB_CLK_ENABLE();

  9.         //用户按键引脚初始化(中断方式)
  10.     GPIO_InitStructure.Mode = GPIO_MODE_IT_FALLING;
  11.     GPIO_InitStructure.Pull = GPIO_NOPULL;
  12.     GPIO_InitStructure.Pin = KEY0_Pin;
  13.     HAL_GPIO_Init(KEY0_GPIO_Port, &GPIO_InitStructure);
  14.         //用户按键接PC13端口,即外部中断“EXTI Line 4 to 15 Interrupts”;
  15.     //设置中断优先级(0~3),此处设置为最高“0”;M0+内核不支持中断子优先级,此处设置为“0”;
  16.     HAL_NVIC_SetPriority(EXTI4_15_IRQn, 0, 0);
  17.     //使能PC13引脚中断
  18.     HAL_NVIC_EnableIRQ(EXTI4_15_IRQn);       

  19.         //用户LED引脚初始化
  20.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
  21.     GPIO_InitStructure.Pull = GPIO_PULLUP;
  22.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
  23.     GPIO_InitStructure.Pin = LED0_Pin;
  24.     HAL_GPIO_Init(LED0_GPIO_Port, &GPIO_InitStructure);
  25. //        GPIOA->MODER &= ~(0X3<<10);     //[11:10]清0
  26. //        GPIOA->MODER |= (1<<10);        //[11:10]=01 设置PA5输出模式

  27.     //LCD5110引脚初始化
  28.         GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
  29.     GPIO_InitStructure.Pull = GPIO_PULLUP;
  30.         GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
  31.     GPIO_InitStructure.Pin = LCD_RST | LCD_CE | LCD_DC | LCD_DIN | LCD_CLK;
  32.     HAL_GPIO_Init(LCD_GPIO_Port, &GPIO_InitStructure);
  33.        
  34. }
复制代码
此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

5
 
    近两天都在移植LCD5110程序,在STM32F103下面正常运行的程序,移植到STM32G071下面就出错,编译正常通过,可是运行时就出错,通过程序调试找到出错是在写字符串时指针下标引起的,显示单个字符则没有问题,目前尚未找到解决办法,暂时只好通过字符编号来显示,程序的可读性就差了许多。
此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

6
 
    经过几天时间调试,LCD5110显示屏终于点亮了。下一步准备测试flash保存用户数据。
此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

7
 
这两天在尝试flash的读写操作,将示例程序复制并调试通过。经过了解,flash操作的步骤第一步是将要操作的页面先刷擦除(即全部写成"1"),之后的写入过程只能将其中的"1"改变为"0",也就是说单个地址的值不能随意改变,若要改变,只能将整页擦除再重写。
此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

8
 
    这几天参照范例测试了flash的擦除、写和读的操作,代码如下:

1、flash擦除的代码
  1. void flash_erase(void)
  2. {
  3.         HAL_FLASH_Unlock();
  4.     EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
  5.         EraseInitStruct.Page        = GetPage(FLASH_USER_START_ADDR);
  6.     EraseInitStruct.NbPages     = 1;
  7.     HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);
  8.         HAL_FLASH_Lock();
  9. }
复制代码



2、flash写入的代码
  1. void flash_write(uint64_t data64)
  2. {
  3.     HAL_FLASH_Unlock();       
  4. //    HAL_FLASH_Program(FLASH_USER_START_ADDR, FLASH_USER_END_ADDR, data64);
  5.     HAL_FLASH_Program(FLASH_USER_START_ADDR, 0x08010000, data64);
  6.     HAL_FLASH_Lock();
  7. }
复制代码



3、flash读代码

  1. uint64_t flash_read(uint64_t ReadAddr)
  2. {
  3.     uint64_t ReadData;
  4.     ReadData = (*(__IO uint64_t*) ReadAddr);
  5.     return ReadData;
  6. }
复制代码



    这些代码编译能通过,今天调试了一天,就是读代码测试通过,擦除和写入的代码都没有测试通过,写入的代码在下图所示的位置出错:


    我反复对照范例进行调试都没有解决问题。


此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

9
 
这几天在调试I2C读写24C02,感觉用系统的I2C来读写非常麻烦,还不如自己写代码更方便灵活。
此帖出自stm32/stm8论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

10
 
怎么下载程序的
此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

11
 
直接用keil的下载功能,板上本身带有调试下载器的。
此帖出自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
快速回复 返回顶部 返回列表