打印
[国产单片机]

【东软载波ESF3696LT开发板活动】软件安装试用和例程运行

[复制链接]
525|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 wucheng2009 于 2021-1-24 15:53 编辑

     首先,主角登场(开发板+es-link):      
                                    
      还有1本台历和1页活动说明没拍(台历太多了,1个供应商最少寄1本,老板让我自己处理,给了几本给周围同事,还有好几本在抽屉里吃灰了)
      接着下载资料,链接奉上:https://huodong.21ic.com/eastsoft/index?mobile=2
这次活动资料准备蛮全面的,基本上不需要再去官网翻资料。但是,缺一个比较重要的,keil插件没放在链接里面,如果需要在keil上编译下载,这个文件是必不可少的,然而官方一点提示都没有,按道理不管哪家的MCU,基本上都会开发一款插件安装到Keil安装目录下的,这是活动的组织者竟然漏掉了不提供。
不但如此,官网的技术支持板块竟然没找到,而且这个插件还藏的比较深,在官网的论坛里面才能找到,翻了1个小时左右,估计这里就实力劝退了不少人。
插件链接奉上:http://www.essemi.com/thread/134.html。
      国际惯例,先安装插件,然后简单看了下ES32_SDK_V1.09文件包里面的文档说明。Projects目录下放置有各微控制器芯片的例程,所以直奔ES32F036XX文件包,大概翻了一遍,最后选了Discovery里面的例程,为什么呢?因为它是基于ALD驱动的,使用习惯接近于STM32的基本库操作。不需要纠结MCU寄存器怎么配置,爽歪歪。
       接下来打开00_led例程的时候,keil提醒没找到器件,如下图,要下载芯片支持包:
      
然而提醒界面的链接打不开,只能手动安装下载好的1.0.8pcak,双击打开之后,继续弹窗报警,MDK版本过低,不支持安装,楼主当时没有截图,网上找了个一样报警的:
      
为什么会出现这种情况呢,因为楼主现在主要在开发3C类电子,而且因为成本原因,用的是台湾HT的单片机和他们家的编译器,所以已经半年没打开keil了。加上之前用到都是stm8/stm32f030/stm32f103这几款来回切换,所以之前也一直没有更新MDK版本。
然后悲剧来了,这个时候楼主走入了一个误区,想着官网应该提供1.0.0版本的支持包,所以在官网上花了浪费了1个小时,还没找到
      换个办法,更新MDK版本,结果更新不了,因为KEIL使用期过期了!众所周知,keil之前国内出过一个**器,只能用到2020年年底,楼主就是用到那个版本。
万能的度娘,别说还真有最新版本的keil的证书**软件和C51+MDK的新版本。
国际惯例,上链接:
https://blog.csdn.net/JasonCrawford/article/details/104066624?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control
老办法,先安装C51和MDK到默认的安装目录(安装时会自动寻找已经安装好的目录),然后用管理员模式开打keil5,使用keil证书**更新有效期(到2032年)。
然后安装下载的1.0.8pcak包,一切顺利。
打开SDK里面的00_led例程,具体路径为:ES32_SDK_V1.09\ES32_SDK_V1.09\Projects\ES32F36xx\Discovery\00_led\MDK-ARM
      打开例程后,编译->pass;烧录,咦!选哪个?懵逼中!!!查了一圈,官方也没写ES_Link怎么设置,也没找到官方的说明文件,只能笨方法一个个试了,终于,成功连上,如下图;
      
      烧录->pass;然而,没有反应!
      源码端上:
//============main.c-===================//
int main()
{
        /* Initialize ALD */
        ald_cmu_init();
        /* Configure system clock */
        ald_cmu_pll1_config(CMU_PLL1_INPUT_HRC_6, CMU_PLL1_OUTPUT_72M);
        ald_cmu_clock_config(CMU_CLOCK_PLL1, 72000000);
        ald_cmu_perh_clock_config(CMU_PERH_ALL, ENABLE);
        /* led init */
        bsp_led_init();
        while(1) {
                bsp_led_toggle(3);
                bsp_led_toggle(2);
                ald_delay_ms(300);
        }
}
//======================BSP_LED.C===============//void bsp_led_init(void)
{
        gpio_init_t x;
        
        bsp_led_off(2);
        bsp_led_off(3);
        x.mode = GPIO_MODE_OUTPUT;
        x.pupd = GPIO_PUSH_UP;
        x.odos = GPIO_PUSH_PULL;
        x.nodrv = GPIO_OUT_DRIVE_1;
        x.podrv = GPIO_OUT_DRIVE_1;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_CMOS;
        x.func = GPIO_FUNC_1;
        ald_gpio_init(GPIO_PORT_LED2, GPIO_PIN_LED2, &x);        
        ald_gpio_init(GPIO_PORT_LED3, GPIO_PIN_LED3, &x);        
}

void bsp_led_on(uint8_t num)
{
        if (num == 2) {
                GPIO_PORT_LED2->BSRR = (GPIO_PIN_LED2 << 15);
        }
        else if (num == 3) {
                GPIO_PORT_LED3->BSRR = (GPIO_PIN_LED3 << 15);
        }
}


void bsp_led_off(uint8_t num)
{

        if (num == 2) {
                GPIO_PORT_LED2->BSRR = GPIO_PIN_LED2;
        }
        else if (num == 3) {
                GPIO_PORT_LED3->BSRR = GPIO_PIN_LED3;
        }
}


void bsp_led_toggle(uint8_t num)
{
        if (num == 2) {
                GPIO_PORT_LED2->BIR = GPIO_PIN_LED2;
        }
        else if (num == 3) {
                GPIO_PORT_LED3->BIR = GPIO_PIN_LED3;
        }
}//=================BSP_LED.H=============//

#define BSP_LED_MAX        2
#define GPIO_PORT_LED3          GPIOC
#define GPIO_PIN_LED3     GPIO_PIN_13
#define GPIO_PORT_LED2          GPIOC
#define GPIO_PIN_LED2     GPIO_PIN_10


按照代码应该是LED2(PC10),LED3(PC13)每隔300ms翻转一次;
对了一下板子上的LED2,边上印着丝印PF1?LED3,边上的丝印是OTG-5V?神马情况,通用代码,不是这块板子的?

      看下官方打包过来的V1.3版本的原理图,确定了,源码和原理图对不上!OK,咱改代码,但是,LED2驱动端口标注为LED4,LED1驱动端口标注为LED3!蜜汁命名方式,咱也不知道为什么要这样,咱也不敢多问,你们开心就好哈。PS:弱弱的问一句,有小伙伴知道这有啥不可告人的秘密吗?
     原理图截图:
   

    咱换成LED1和LED2好了,对应端口PF0/PF1,源码更改:
  //=====================分隔符===============//
    main.c
    int main()
   {
        /* Initialize ALD */
        ald_cmu_init();
        /* Configure system clock */
        ald_cmu_pll1_config(CMU_PLL1_INPUT_HRC_6, CMU_PLL1_OUTPUT_72M);
        ald_cmu_clock_config(CMU_CLOCK_PLL1, 72000000);
        ald_cmu_perh_clock_config(CMU_PERH_ALL, ENABLE);
        /* led init */
        bsp_led_init();
        while(1) {
                bsp_led_toggle(1);
                bsp_led_toggle(2);
                ald_delay_ms(300);
        }
   }
  //=====================分隔符===============//
    bsp_led.c
   void bsp_led_init(void)
   {
        gpio_init_t x;

        bsp_led_off(1);
        bsp_led_off(2);
        x.mode = GPIO_MODE_OUTPUT;
        x.pupd = GPIO_PUSH_UP;
        x.odos = GPIO_PUSH_PULL;
        x.nodrv = GPIO_OUT_DRIVE_1;
        x.podrv = GPIO_OUT_DRIVE_1;
        x.flt  = GPIO_FILTER_DISABLE;
        x.type = GPIO_TYPE_CMOS;
        x.func = GPIO_FUNC_1;
        ald_gpio_init(GPIO_PORT_LED1, GPIO_PIN_LED1, &x);        
        ald_gpio_init(GPIO_PORT_LED2, GPIO_PIN_LED2, &x);        
   }

    void bsp_led_on(uint8_t num)
   {
        if (num == 1) {
                GPIO_PORT_LED1->BSRR = (GPIO_PIN_LED1 << 15);
        }
        else if (num == 2) {
                GPIO_PORT_LED2->BSRR = (GPIO_PIN_LED2 << 15);
        }
   }   
   void bsp_led_off(uint8_t num)
   {

        if (num == 1) {
                GPIO_PORT_LED1->BSRR = GPIO_PIN_LED1;
        }
        else if (num == 2) {
                GPIO_PORT_LED2->BSRR = GPIO_PIN_LED2;
        }
    }  
    void bsp_led_toggle(uint8_t num)
    {
        if (num == 1) {
                GPIO_PORT_LED1->BIR = GPIO_PIN_LED1;
        }
        else if (num == 2) {
                GPIO_PORT_LED2->BIR = GPIO_PIN_LED2;
        }
    }
   //=====================分隔符===============//
   bsp_led.h
   #define BSP_LED_MAX        2

    #define GPIO_PORT_LED1          GPIOF
   #define GPIO_PIN_LED1     GPIO_PIN_0
   #define GPIO_PORT_LED2          GPIOF
   #define GPIO_PIN_LED2     GPIO_PIN_1
  //=====================分隔符===============//
      编译一次,成功,没问题,烧录,LED1/LED2同时闪烁起来了。
OK,没问题。大概花了半天时间把官方例程跑起来了。
总结一下,官方准备的资料还算全面,正式开发会节约不少开发时间。美中不足的,没有提供keil插件,插件还不在官网的技术支持目录下,而是在论坛里面单独提供,一般找资料都应该是先找官方资料的,另外Keil界面没有使用说明,所以使用起来会有点找不到方向感的感觉。
      最后,原理图编辑的有点任性。








使用特权

评论回复

相关帖子

沙发
windskygrow| | 2021-2-7 11:35 | 只看该作者
http://www.essemi.com/article/c143.html
插件在官网呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝