首页 > 评测 > 【SWDM-QFP100-34SVEA3测评】+ 环境搭建与点灯之一波两折

【SWDM-QFP100-34SVEA3测评】+ 环境搭建与点灯之一波两折

  
  • 作者:
  • 来源:
  • [导读]
  • #申请原创#上期发了开箱贴,并将排针焊接好,今天来分享一下基于Keil开发平台的环境搭建。首先加入华芯微特技术QQ群,群中公告有提供全系列的开发资料下载链接:https://pan.baidu.com/s/1atLWlk1_SUR8WjISr-Bfpw,提
#申请原创#上期发了开箱贴,并将排针焊接好,今天来分享一下基于Keil开发平台的环境搭建。首先加入华芯微特技术QQ群,群中公告有提供全系列的开发资料下载链接:https://pan.baidu.com/s/1atLWlk1_SUR8WjISr-Bfpw,提取码:byv2      资料很齐全,这里我们暂且只需下载“00.其它公用资料”,“09.SWM341”两个文件夹的内容,关于SWDM-QFP100-34SVEA3开发板的接口说明图,在根目录下的《00.SYNWIT MCU 最小系统板应用指引_202212151802》文档中有介绍。

        关于在Keil平台上搭建环境,资料包中的“00.其它公用资料\01.KEIL IAR 工程建立说明”目录下的《UM1702 KEIL工程建立说明》有详细的讲解,由于SWDM-QFP100-34SVEA3开发板是基于ARM Cortex-M33的内核,要求Keil版本在V5.32以上,JLink下载调试器硬件版本在V9或以上,要使用Keil开发基于SWM341的程序,首先得安装pack支持包,建议安装“00.其它公用资料\02.KEIL工程下载算法库&器件支持包”目录下的“Synwit.SWM32_DFP.2.0.4.pack”。
Synwit.SWM32_DFP.2.0.4.zip (5.25 MB)


        pack安装完成后,进入到“\09.SWM341\01.基础库”目录下,将“SWM341_Lib-20230217.zip”文件解压,进入到GPIO参考例程中,使用Keil打开“KeyLED”工程,编译完成后,将开发板上电,使用杜邦线将JLink调试器与开发板上的J7正确连接。

         Debug调试下载时,弹出如下界面:

        这难道是提示J-Link的版本过低?于是乎在“00.其它公用资料\80.SEGGER JLINK”目录下,选择安装“JLink_Windows_V700”。


     安装完成后,再次进入Debug调试,依旧选择“J-LINK/J-TRACE Cortex”,结果还是显示如下界面,还是无法正常识别到JLink下载器。

      然后质疑是不是Keil的版本问题,笔者之前一直使用的是uVision V5.26版本,在此之前均未发现类似的情况。好在网络方便,重新安装一款最新版的Keil也是有必要的,于是乎备份好之前的pack包,卸载旧版本,下载安装最新的Keil_V5.38a,链接:https://pan.baidu.com/s/16moWnK-O1DoZtdvQ0czwcg,提取码:rnvd
     &nsp; 当然以上的链接地址也包括了**工具,值得注意的是,安装完成后,选中“Keil uVision5”图标,鼠标右键选择“以管理员身份运行”,然后才能使用**工具**。导入原来备份好的pack包,至此Keil版本更新完成。

       然后再次进入Debug选项,此次终于可以正确识别到JLink调试下载器了。


        由官方提供的电路原理图可知,板子的按键KEY与LED连接在J6上,而参考的GPIO操作例程是将PA0定义为KEY,PA5定义为LED,实现的功能就是通过对PA0的输入控制,从而控制PA5的输出,这里需要使用杜邦线将PA0与J6的KEY脚相连,PA5与J6的LED脚相连。
SWM34SVET6_SWDM-QFP100-34SVEA3.pdf (269.41 KB)

         因此采用SDK的GPIO参考例程,实验现象如下:

       在此工程的基础上,利用人的视觉暂留时间差,稍加修改即可完成呼吸灯的效果,代码修改如下:
  1. #include "SWM341.h"

  2. uint32_t SysTick_Delayus(uint32_t us);

  3. void delay(int s)
  4. {
  5.         for(int i=0; i<s; i++)
  6.    SysTick_Delayus(1000000);
  7. }

  8. void delayms(int ms)
  9. {
  10.         for(int i=0; i<ms; i++)
  11.    SysTick_Delayus(1000);
  12. }

  13. void Breathe(void)
  14. {
  15.         int i=0;
  16.         int time = 25;
  17.         for(i=0; i<time; i++)
  18.         {
  19.                 GPIO_SetBit(GPIOA, PIN9);
  20.                 delayms(i);
  21.                 GPIO_ClrBit(GPIOA, PIN9);
  22.                 delayms(time - i);
  23.         }
  24.         for(i=time; i>0; i--)
  25.         {
  26.                 GPIO_SetBit(GPIOA, PIN9);
  27.                 delayms(i);
  28.                 GPIO_ClrBit(GPIOA, PIN9);
  29.                 delayms(time - i);
  30.         }
  31. }

  32. int main(void)
  33. {       
  34.         SystemInit();
  35.        
  36.         GPIO_Init(GPIOA, PIN0, 0, 1, 0, 0);                        //输入,上拉使能,连接板上KEY
  37.        
  38.         GPIO_Init(GPIOA, PIN5, 1, 0, 0, 0);                        //输出,连接板上LED灯
  39.        
  40.         GPIO_Init(GPIOA, PIN9, 1, 0, 0, 0);                        //输出,连接外置LED灯
  41.        
  42.         while(1==1)
  43.         {
  44.                 if(GPIO_GetBit(GPIOA, PIN0) == 0)                //按键被按下
  45.                 {
  46.                         GPIO_SetBit(GPIOA, PIN5);
  47.                 }
  48.                 else
  49.                 {
  50.                         GPIO_ClrBit(GPIOA, PIN5);
  51.                 }
  52.                 Breathe();
  53.         }
  54. }

  55. /* 设CPU主频160MHz,最大延时时间为pow(2, 24)/160=104857us */
  56. uint32_t SysTick_Delayus(uint32_t us)
  57. {
  58.         uint32_t ticks = us * CyclesPerUs;
  59.        
  60.         if((ticks - 1) > SysTick_LOAD_RELOAD_Msk)
  61.                 return 1;
  62.        
  63.         SysTick->LOAD = ticks - 1;
  64.         SysTick->VAL  = 0;    //清零计数器,清除COUNTFLAG标志
  65.         SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk |
  66.                     SysTick_CTRL_ENABLE_Msk;
  67.        
  68.         while(!(SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk)) __NOP();
  69.         SysTick->CTRL = 0;
  70.        
  71.         return 0;
  72. }
复制代码
        编译下载后,将外置LED灯的正极连接在PA9上,负极连到板上的GND上,呈现的呼吸灯效果如下,此次分享到此结束。青山不改,绿水长流,咱们后会有期。

  • 本文系21ic原创,未经许可禁止转载!

网友评论