hujj 发表于 2019-1-7 21:52

【ST NUCLEO-G071RB评测】+ 我的评测过程

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

本评测使用的ST NUCLEO-G071RB开发板来自EEWORL论坛,以下是STM产品的链接:
https://www.stmcu.com.cn/index.p ... /261/layout/product


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



    另外查找到了开发板扩展引脚排列图,并转换成PDF文件:



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



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





hujj 发表于 2019-1-8 11:33

    经过阅读坛友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(见下图)。



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



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




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




    修改之后再试编译,这次应该是真正完成了开发平台的建立。

hujj 发表于 2019-1-9 10:43

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


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


    这是系统时钟配置界面:


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


    最后一个是工具界面。


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

hujj 发表于 2019-1-13 22:25

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

    /* USER CODE BEGIN Init */

    /* USER CODE END Init */

    /* Configure the system clock */
    SystemClock_Config();

    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    MX_USART1_Init();
    MX_I2C2_Init();
    MX_SPI1_Init();
        systick_init();
       
        led_flag = 0;
        LCD_init();
        LCD_clear();
        scree_start();

        while (1)
    {
                HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);    //LD4端口翻转
      delay_ms(led_time);
      
    }

}


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

/****************************************************************
* 中断回调函数,
* 接收中断处理函数调用EXTI4_15_IRQHandler()传递的中断引脚号   *
****************************************************************/
void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin == KEY0_Pin)   //确认PC13产生下降沿脉冲
    {
                led_time = led_time + 125;
                if(led_time > 1000) led_time = 125;
    }
}


下面是GPIO引脚定义和按键中断配置的函数:
void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef   GPIO_InitStructure;
       
        /* GPIO Ports Clock Enable */
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();

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

        //用户LED引脚初始化
        GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull = GPIO_PULLUP;
        GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Pin = LED0_Pin;
    HAL_GPIO_Init(LED0_GPIO_Port, &GPIO_InitStructure);
//        GPIOA->MODER &= ~(0X3<<10);   //清0
//        GPIOA->MODER |= (1<<10);      //=01 设置PA5输出模式

    //LCD5110引脚初始化
        GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStructure.Pull = GPIO_PULLUP;
        GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStructure.Pin = LCD_RST | LCD_CE | LCD_DC | LCD_DIN | LCD_CLK;
    HAL_GPIO_Init(LCD_GPIO_Port, &GPIO_InitStructure);
       
}

hujj 发表于 2019-1-14 19:25

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

hujj 发表于 2019-1-15 15:43

    经过几天时间调试,LCD5110显示屏终于点亮了。下一步准备测试flash保存用户数据。

hujj 发表于 2019-1-19 12:37

<div class='shownolgin' data-isdigest='no'>这两天在尝试flash的读写操作,将示例程序复制并调试通过。经过了解,flash操作的步骤第一步是将要操作的页面先刷擦除(即全部写成"1"),之后的写入过程只能将其中的"1"改变为"0",也就是说单个地址的值不能随意改变,若要改变,只能将整页擦除再重写。</div><script>showreplylogin();</script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

hujj 发表于 2019-1-23 22:09

<div class='shownolgin' data-isdigest='no'>    这几天参照范例测试了flash的擦除、写和读的操作,代码如下:

1、flash擦除的代码
void flash_erase(void)
{
        HAL_FLASH_Unlock();
    EraseInitStruct.TypeErase   = FLASH_TYPEERASE_PAGES;
        EraseInitStruct.Page      = GetPage(FLASH_USER_START_ADDR);
    EraseInitStruct.NbPages   = 1;
    HAL_FLASHEx_Erase(&EraseInitStruct, &PageError);
        HAL_FLASH_Lock();
}


2、flash写入的代码
void flash_write(uint64_t data64)
{
    HAL_FLASH_Unlock();       
//    HAL_FLASH_Program(FLASH_USER_START_ADDR, FLASH_USER_END_ADDR, data64);
    HAL_FLASH_Program(FLASH_USER_START_ADDR, 0x08010000, data64);
    HAL_FLASH_Lock();
}


3、flash读代码

uint64_t flash_read(uint64_t ReadAddr)
{
    uint64_t ReadData;
    ReadData = (*(__IO uint64_t*) ReadAddr);
    return ReadData;
}



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


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


</div><script>showreplylogin();</script>

hujj 发表于 2019-1-27 21:46

<div class='shownolgin' data-isdigest='no'>这几天在调试I2C读写24C02,感觉用系统的I2C来读写非常麻烦,还不如自己写代码更方便灵活。</div><script>showreplylogin();</script>

周小北 发表于 2019-3-14 11:53

<div class='shownolgin' data-isdigest='no'>怎么下载程序的</div><script>showreplylogin();</script>

hujj 发表于 2019-3-14 14:38

<div class='shownolgin' data-isdigest='no'>直接用keil的下载功能,板上本身带有调试下载器的。</div><script>showreplylogin();</script>
页: [1]
查看完整版本: 【ST NUCLEO-G071RB评测】+ 我的评测过程