| 本帖最后由 yang_alex 于 2020-4-3 16:35 编辑 
 基于赛元SC92F8003的开发心得--SC92F8003的小学习板评估
 
 很早就收到了赛元寄来的开发板,只是一直杂事缠身。今天正好有空,赶紧评估一下。
 
 以前没用过赛元的MCU,这次活动一下子申请了六块板子,板子做工不错。
 本帖的主角:赛元SC92F8003的小学习板
 
   
 集仿真、脱机烧录、调试功能于一身的SC Link
 
   
 赛元LB1014隔空水位检测评估开发板
 
   
 从左到右分别是:
 LB1013-插件胶圈评估开发板、LB1010-弹簧按键评估开发板、LB1012-PAD按键评估开发板、LB1011-隔空3MM评估开发板
 
   
 本帖主要讲赛元SC92F8003的小学习板和仿真器SC Link,其他板子另外帖子说明。
 
 赛元SC92F8003的小学习板的两排引脚对照芯片引脚全部引出,一边是一个Micro USB供电端口,另一边是四个仿真烧录引脚,VDD、DIO、VSS、CLK,非常简洁。PCB上只在P13引脚接出了一只LED,另一个LED是电源灯。
 
 那就从这只LED开始基础的应用学习吧。
 
 首先是到赛元的网站上下载相关文档和软件,赛元网站做的不错,但是文档归类感觉有些杂乱。忙了好一会才找齐自己要的文档。建议第一次接触赛元的开发者到赛元的网站上“汇总资料下载”(https://www.socmcu.com/index.php?m=Support&a=index&bid=87)下下载“工具与软件汇总”(http://www.socmcu.com/BBSfiles/工具与软件.rar)
 
 这个软件包里包括了Keil插件、SC LINK的驱动、量产工具 PRO52相关软件文档和触摸按键调试助手--TK 调试软件。
 
   
 既然是51内核,开发平台自然少不了用Keil C51了。这个软件之前已经安装过,这里就不多说了。不过Keil C51厂家列表里没有赛元,所以也没法找到赛元的器件。这时就需要安装Keil插件来解决了。此插件将自动检测电脑中的KEIL安装目录,将插件安装在KEIL的安装路径的C51目录下,并创建开始菜单及桌面快捷方式,当然也可以在安装过程中对这些默认设置进行修改。
 
   
 
   
 从官网下载了一个赛元8003学习评估开发板 应用资料,里面包含赛元SC92F8003评估板的示例程序。https://www.socmcu.com/index.php?m=Support&a=index&bid=87
 
 评估第一事:首先肯定是点灯啊。赛元的点灯示例程序在GPIO例程中,拷贝、编译、下载、运行。发现评估板上灯不亮,通过仿真查程序,对照原理图,发现是板子上的LED接的是P13,而例程中是P14,改成P13,编译、下载、运行,赛元SC92F8003评估板上的LED就开始闪烁了。
 
 也可以仿真看看:void main(void)
{
        uint16_t i,j;
        GPIO_Init(GPIO1,GPIO_PIN_3,GPIO_MODE_OUT_PP);        //将P13设置为强推挽输出
        while(1)
        {
                GPIO_WriteHigh(GPIO1,GPIO_PIN_3);                        //P13写高
                for(i=0;i<400;i++)                                           //延时一段时间
                {
                        for(j=0;j<100;j++);
                }
                GPIO_WriteLow(GPIO1,GPIO_PIN_3);                        //P13写低
                for(i=0;i<400;i++)                                            //延时一段时间
                {
                        for(j=0;j<100;j++);
                }
        }
}
   这是什么鬼?我代码中没对P1.1进行操作啊?为什么始终是“1”?
 对照PIN脚图发现,P1.1原来和仿真调试的CLK引脚是复用的。同样的,P2.0原来和仿真调试的DIO引脚是复用的。大家调试的时候要注意一下,这两个管脚,调试时可以用其他引脚调试,正式生成烧录代码时再调回这两个引脚。
 
   由于只有一个板子,没敢尝试如果代码中启用了这两个引脚,调试时会发生什么。如果原厂有个明确的说明就更好了。
 
 点灯程序里LED闪烁时间间隔是用的循环延时,太浪费MCU资源了。下面试试定时器中断定时。
 
 打开赛元8003评估板的Timer0示例程序,原来GPIO用的是P1.0,把它改成P1.3。注意:中断服务程序里也要改啊!
 
    定义一个全局变量进行计数,满100mS反转一次。    Timer0初始化程序:
 void Timer0Init()
{
    TIM0_TimeBaseInit(TIM0_PRESSEL_FSYS_D12,TIM0_MODE_TIMER);        //Timer0 12分频,做定时器
    TIM0_WorkMode0Config(7192);                                                //设置Timer0工作模式0,初值为7192,定时1ms
    //        TIM0_WorkMode1Config(65536-1600);
    TIM0_ITConfig(ENABLE, LOW);                                                //使能Timer0中断
    TIM0_Cmd(ENABLE);                                                                //使能Timer0计数
}
Timer0定时中断程序:
 
 编译、下载、运行、OK!void Timer0Interrupt()                interrupt 1
{
    TIM0_Mode0SetReloadCounter(7192);
        
    T_ms ++;
    if(T_ms == 100)
    {
        GPIO_WriteHigh(GPIO1,GPIO_PIN_3);                        //P13写高
   
 再接下来试试呼吸灯。正好008具有PWM功能,直接利用PWM来调LED亮度,这时发现板子不知是巧合还是有意这样设计,P13正好和PWM6复用。
 
 打开赛元8003评估板的PWM示例程序,原来GPIO用的是P2.0,把它改成P1.3。PWM0PWM3互补设置改成PWM6独立模式。其他不需要的去掉,注意:中断服务程序里也要改啊!
 GPIO初始化程序
 
 PWM初始化程序void IOInit()
{
    GPIO_Init(GPIO1, GPIO_PIN_3, GPIO_MODE_OUT_PP);        //P13强推输出模式
}
 Timer0初始化程序:void PWM_INIT(void)
{
    PWM_Init(PWM_PRESSEL_FOSC_D2, 599);                           //PWM时钟源2分频,周期为(599+1)*2/FOSC
    PWM_OutputStateConfig(PWM6, PWM_OUTPUTSTATE_ENABLE);//使能PWM6
    PWM_IndependentModeConfig(PWM6, 300);                        //PWM6独立设置,占空比设置300/600=1/2
    PWM_Cmd(ENABLE);                                          //打开PWM总开关
    PWM_ITConfig(ENABLE, LOW);                            //打开PWM中断
}
 Timer0定时中断程序:void Timer0Init()
{
    TIM0_TimeBaseInit(TIM0_PRESSEL_FSYS_D12,TIM0_MODE_TIMER);        //Timer0 12分频,做定时器
    TIM0_WorkMode0Config(7192);                                   //设置Timer0工作模式0,初值为7192,定时1ms
    //        TIM0_WorkMode1Config(65536-1600);
    TIM0_ITConfig(ENABLE, LOW);                                    //使能Timer0中断
    TIM0_Cmd(ENABLE);                                                  //使能Timer0计数
}
 主程序:void Timer0Interrupt()                interrupt 1
{
        
    if(Dir == 1)
   {
      T_PWM_Duty += 5;
                
      if(T_PWM_Duty > 1000)
      {
          Dir = 0;
      }
   }
   else
   {
       T_PWM_Duty -= 5;
                
       if(T_PWM_Duty < 2)
       {
           Dir = 1;
       }                        
    }
        
    PWM_IndependentModeConfig(PWM6, T_PWM_Duty);      //PWM6独立设置,占空比设置        
}
 编译、下载、运行、OK!void main(void)
{            
    IOInit();
    Timer0Init();
    PWM_INIT();
        
    T_PWM_Duty = 0;
    Dir = 1;
    enableInterrupts();
    while(1);
}
   
 赛元8003评估板和SC-LINK仿真器初步试用结束。
 
 谈谈试用感受:
 
 赛元的底层驱动软件还是很贴心的,不需要自己啃手册自己写。而且代码风格很好,很是赏心悦目!
 示例程序也不错,恰到好处的体现了底层驱动代码的初始化和调用,对开发人员学习很有帮助!
 最不错的就是SC-LINK仿真器了,应该说SC-LINK不仅仅是仿真器,用赛元自己的话说“SC LINK 适用于赛元 92F/93F 系列 IC 的脱机/在线烧写、仿真以及 92F/93F 系列触控 IC 的 TouchKey 调试”。真正是一机多用啊!配合烧录软件 SOC PRO51使用,完全胜任批量生产!更重要的是支持脱机烧录!支持序列号烧录,真是太贴心了。
 
   最后,美国已经开始变本加厉的围堵中国,是困难也是机遇!国货当自强!我们一起加油!!
 
 
 
 |