本帖最后由 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定时中断程序:
void Timer0Interrupt() interrupt 1
{
TIM0_Mode0SetReloadCounter(7192);
T_ms ++;
if(T_ms == 100)
{
GPIO_WriteHigh(GPIO1,GPIO_PIN_3); //P13写高
编译、下载、运行、OK!
再接下来试试呼吸灯。正好008具有PWM功能,直接利用PWM来调LED亮度,这时发现板子不知是巧合还是有意这样设计,P13正好和PWM6复用。
打开赛元8003评估板的PWM示例程序,原来GPIO用的是P2.0,把它改成P1.3。PWM0PWM3互补设置改成PWM6独立模式。其他不需要的去掉,注意:中断服务程序里也要改啊!
GPIO初始化程序
void IOInit()
{
GPIO_Init(GPIO1, GPIO_PIN_3, GPIO_MODE_OUT_PP); //P13强推输出模式
}
PWM初始化程序
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计数
}
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独立设置,占空比设置
}
主程序:
void main(void)
{
IOInit();
Timer0Init();
PWM_INIT();
T_PWM_Duty = 0;
Dir = 1;
enableInterrupts();
while(1);
}
编译、下载、运行、OK!
赛元8003评估板和SC-LINK仿真器初步试用结束。
谈谈试用感受:
赛元的底层驱动软件还是很贴心的,不需要自己啃手册自己写。而且代码风格很好,很是赏心悦目!
示例程序也不错,恰到好处的体现了底层驱动代码的初始化和调用,对开发人员学习很有帮助!
最不错的就是SC-LINK仿真器了,应该说SC-LINK不仅仅是仿真器,用赛元自己的话说“SC LINK 适用于赛元 92F/93F 系列 IC 的脱机/在线烧写、仿真以及 92F/93F 系列触控 IC 的 TouchKey 调试”。真正是一机多用啊!配合烧录软件 SOC PRO51使用,完全胜任批量生产!更重要的是支持脱机烧录!支持序列号烧录,真是太贴心了。
最后,美国已经开始变本加厉的围堵中国,是困难也是机遇!国货当自强!我们一起加油!!
|