[LKS32 软件][ LKS32MC037E开发板评测 ]+环境搭建与点灯实验

开发板LKS32MC037E已收到有段时间了,前段时间尝试采用MCPWM方式去驱动尼得科无刷直流电机,带霍尔接口的。电机一直原地抖动,并未能转动起来,手里要有台示波器就好了。今天星期六,也是来年工作的第一个周末,先来分享一下简单的点灯测试。
        LKS32MC037E开发套件包含MCU板+功率底板,这款MCU搭建32位Cortex-M0内核,主频48MHz,采用SSOP24封装,工业级工作温度范围,适用于有感BLDC、无感BLDC、有感FOC、无感FOC及步进电机、永磁同步、异步电机等控制系统。也可适用于数字电源控制系统。LKS_EVB_MVPOWPRE_V2.0支持DC7~24V输入,DC24V时功率在80W以下,可实现无感方波、有感或无感FOC控制,支持按键启停和模拟电位器调速,FG输出,串口通讯等功能。开发板的系统资源框图如下: 
        “LKS_EVB_MVPOWPRE_V2.0”板子的PCB点位图如下,可以大致得了解各接口的布局。

        从官网:https://www.linkosemi.com/LKS03x/list.aspx可以获取关于LKS32MC037E的开发资源包(包括基于Keil的pack包)。电脑中已经装好Keil,只需将下载好的“Linko.LKS03x.1.0.6.pack”文件,双击打开并安装,后续打开官方提供的demo例程即可选择工程对应的MCU型号。

         此次实验意在点亮LED2,接下来我们根据官方提供的资料,找出LED2与MCU板上的LKS32MC037E连接管脚。



         由此可见,只需要将P1.4管脚输出高电平则LED2灯被点亮,P1.4管脚输出低电平则LED2熄灭。在GPIO参考例程中,简单修改即可点亮LED2.

#include "lks32mc03x_lib.h"

#include "hardware_init.h"

#include "delay.h"



void Hardware_init(void)

{

    __disable_irq();                  /* 关闭中断 中断总开关 */

    SYS_WR_PROTECT = 0x7a83;          /* 开启写使能*/

    IWDG_DISABLE();                   /* 关闭独立看门狗使能*/

    FLASH_CFG |= 0x00080000;          /* FLASH 预取加速使能*/

  

    delay_init(48);                   /* 延时函数初始化时钟48MHz*/

    GPIO_init();                      /* GPIO初始化 */

    delay_us(100);                    /* 延时等待硬件初始化稳定 */

    __enable_irq();                   /* 开启总中断 */

}

void Clock_Init(void)

{

    SYS_WR_PROTECT = 0x7a83;   /* 解除系统寄存器写保护 */

    SYS_VolSelModule(1);       /* 0: 3.3V ; 1: 5.0V*/

    SYS_AFE_REG0 |= BIT15;     /* BIT15:PLLPDN */

    SoftDelay(100);            /* 等待PLL稳定*/

          SYS_CLK_CFG = 0x000001ff; /* BIT[9:8]:0: CLK_HS,1:PLL,2:LRC,3:LRC

                                 | BIT[7:0]CLK_DIV  | 0x1ff对应48M时钟 */

}

void SystemInit(void)

{

    Clock_Init(); /* 时钟初始化 */

}

void GPIO_init(void)

{

    GPIO_InitTypeDef GPIO_InitStruct;

    GPIO_StructInit(&GPIO_InitStruct);

    /* P1.4*/

    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;    /*输出模式*/

    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;

    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; /*不上拉*/

    GPIO_Init(GPIO1, &GPIO_InitStruct);

          GPIO_ResetBits(GPIO1, GPIO_Pin_4);      /* LED2 灭*/

}

void SoftDelay(u32 cnt)

{

    volatile u32 t_cnt;



    for (t_cnt = 0; t_cnt < cnt; t_cnt++)

    {

        __nop();

    }

}

复制

#include "delay.h"

#include "lks32mc03x_lib.h"



static u32 fac_us = 0;

static u32 fac_ms = 0;



void delay_init(u32 SYSCLK)

{

         SysTick->CTRL&=~(1<<2);                                        //SYSTICK使用外部时钟源,1/8 HCLK         

        fac_us=SYSCLK/8;                                                    //不论是否使用OS,fac_us都需要使用,每产生1us,需要多少次数,因为是通过一个计数寄存器计时的。

        fac_ms=(u16)fac_us*1000;                                //非OS下,代表每个ms需要的systick时钟数   

}



void delay_us(u32 nus)

{

        u32 temp;                     

        SysTick->LOAD=nus*fac_us;                                 //时间加载                           

        SysTick->VAL=0x00;                                        //清空计数器

        SysTick->CTRL=0x01 ;                                      //开始倒数          

        do

        {

                temp=SysTick->CTRL;

        }while((temp&0x01)&&!(temp&(1<<16)));        //等待时间到达   

        SysTick->CTRL=0x00;                                       //关闭计数器

        SysTick->VAL =0X00;                                       //清空计数器 

}



void delay_xms(u32 nms)

{

        u32 temp;                   

        SysTick->LOAD=(u32)nms*fac_ms;                        //时间加载(SysTick->LOAD为24bit)

        SysTick->VAL =0x00;                                   //清空计数器

        SysTick->CTRL=0x01 ;                                  //开始倒数  

        do

        {

                temp=SysTick->CTRL;

        }while((temp&0x01)&&!(temp&(1<<16)));        //等待时间到达   

        SysTick->CTRL=0x00;                                       //关闭计数器

        SysTick->VAL =0X00;                                       //清空计数器                      

} 

//延时nms 

//nms:0~65535

void delay_ms(u32 nms)

{

#if 1

        u8 repeat=nms/540;                                                //这里用540,是考虑到某些客户可能超频使用,

                                                                                        //比如超频到248M的时候,delay_xms最大只能延时541ms左右了

        u16 remain=nms%540;

        while(repeat)

        {

                delay_xms(540);

                repeat--;

        }

        if(remain)delay_xms(remain);

#else

        u32 t_cnt;



        for(t_cnt = 0; t_cnt < nms*1000; t_cnt++)

        {

                __nop();

        }

#endif

} 

复制

#include "lks32mc03x_lib.h"

#include "hardware_init.h"

#include "delay.h"



int main(void)

{

        Hardware_init(); /* 硬件初始化 */

        for (;;)

        {

          GPIO_SetBits(GPIO1, GPIO_Pin_4);    /* LED2 亮*/

                delay_ms(300);                     /* 延时20ms*/

                

                GPIO_ResetBits(GPIO1, GPIO_Pin_4);  /* LED2 灭*/

                delay_ms(300);     

        }

}

       编译完成后,将JLink烧录器连接到MCU板上的J1接口,Keil中的Debug中选择J-LINK方式下载程序,识别到JLink调试器。

 


         程序下载到MCU后,然后将蜂鸣器连接到MCU板上P1排针上的1、2管脚上,按一下RESET键,重启开发板,则会发现LED2点亮的同时,蜂鸣器报警声响起。此次简单的点灯测试就到此结束,感谢凌鸥提供的板子,至于电机驱动功能评测部分,工程中还需要针对电机类型进行调试,参考例程的注释比较专业,没有接触过工业电机应用行业的开发者,理解起来还是比较吃力的,后续有时间调试再评测电机应用方面的测试效果。
LKS32MC037E点LED2与鸣蜂鸣器。
---------------------
作者:yinwuqing110
链接:https://bbs.21ic.com/icview-3282042-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值