打印
[LKS32 软件]

【凌鸥创芯电机开发板LKS32MC071CBT8评测报告】时钟系统介绍及

[复制链接]
5101|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 尹小舟 于 2023-7-31 10:45 编辑

LKS32MC071时钟系统介绍

      该芯片时钟系统包括内部 32KHz RC 时钟、内部 8MHz RC 时钟、外部 8MHz 晶体起振电路、PLL 电路组成



PLL 对 8M RC 时钟进行倍频,以提供给 MCU、ADC 等模块更高速的时钟。MCU 和 PWM 模块的最高时钟为 96
MHz,ADC 模块典型工作时钟为 48MHz,通过寄存器 ADCLKSEL<1:0>可设置为不同的 ADC 工作频率。
  PLL 通过设置 PLLPDN=’1’打开(默认关闭,设 1 打开),开启 PLL 模块之前,同样也需要开启BGP(Bandgap)模块。
开启 PLL 之后,PLL 需要 6us 的稳定时间来输出稳定时钟。芯片上电的默认状态下,RCH 时钟和 BGP 模块都是开启的,但 PLL 默认是关闭的,需要软件来开启。
系统时钟可以通过SYS_CLK_CFG .CLK_SEL寄存器来选择,PLL输出的时钟也可以通过CLK_DIV改变

GPIO功能测试

   内部无下拉,有上拉,数字信号经过一个三态门输出,输入通过一个与门进入芯片内部,模拟信号通
过一个约200Ω的电阻串联直接连接到PAD,数字信号经过一个三态门输出
#include "lks32mc07x_lib.h"

#include "hardware_init.h"

int main(void)

{

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

for (;;)

{

     GPIO_SetBits(GPIO0, GPIO_Pin_6); /* LED1 亮*/

      SoftDelay(0xFFFFF);

      GPIO_ResetBits(GPIO0, GPIO_Pin_6); /* LED1 灭*/

      SoftDelay(0xFFFFF);

}

}

void Hardware_init(void)

{

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

       SYS_WR_PROTECT = 0x7a83;

       IWDG_DISABLE(); /* 关闭看门狗*/

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

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

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

}

SYS_PROTECT 是写保护寄存器,写入 0x7A83,解除写保护,使能寄存器写操作,写入其它值,开启写保护,禁止寄存器写操作,读回恒为 0

void GPIO_init(void)

{

       GPIO_InitTypeDefGPIO_InitStruct;

       GPIO_StructInit(&GPIO_InitStruct);

       GPIO_StructInit(&GPIO_InitStruct);
   
       GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;

       GPIO_InitStruct.GPIO_Pin= GPIO_Pin_6;

       GPIO_Init(GPIO0, &GPIO_InitStruct);

}

下载是使用的合宙的DAP

逻辑分析仪采集到GPIO翻转

定时器定时功能

#include "hardware_init.h"
void Hardware_init(void);
uint8_t Invers_GPIO(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
<p style="line-height: 30px; text-indent: 2em;">u16 reg;
      reg = GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin); //读GPIO电平
     if (reg)
     {
          GPIO_ResetBits(GPIOx, GPIO_Pin);
          return 0;
     }
     else
    {
          GPIO_SetBits(GPIOx, GPIO_Pin);
         return 1;
     }</p>}
int main(void)
{
      Hardware_init();                         //硬件初始化
      for(;;)
      {
           SoftDelay(100);
       }
}

Invers_GPIO  是GPIO翻转函数
Invers_GPIO  函数要在interrupt.c文件中声明
extern uint8_t Invers_GPIO(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

void GPIO_init(void)
{
GPIO_InitTypeDefGPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct);
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Pin=  GPIO_Pin_6;
GPIO_Init(GPIO0, &GPIO_InitStruct);
}
void UTimer_init(void)
{
TIM_TimerInitTypeDefTIM_InitStruct;
TIM_TimerStrutInit(&TIM_InitStruct);                  / Timer结构体初始化/
TIM_InitStruct.Timer_TH = 48000;    / 定时器计数门限初始值48000/
TIM_InitStruct.Timer_FLT = 0;      / 设置捕捉模式或编码器模式下对应通道的数字滤波值 /
TIM_InitStruct.Timer_ClockDiv = TIMER_CLK_DIV1;       / 设置Timer模块时钟2分频系数 /
TIM_InitStruct.Timer_IRQEna = Timer_IRQEna_ZC; / 开启Timer模块比较中断和过零中断/
TIM_TimerInit(UTIMER0, &TIM_InitStruct);
TIM_TimerCmd(UTIMER0, ENABLE);                        / Timer0 模块使能 */
}
void TIMER0_IRQHandler(void)
{
if(TIM_GetFlag(UTIMER0,TIMER_CH0_IF))
{
TIM_ClearIRQFlag(UTIMER0,TIMER_CH0_IF);
}
if(TIM_GetFlag(UTIMER0,TIMER_CH1_IF))
{
TIM_ClearIRQFlag(UTIMER0,TIMER_CH1_IF);
}
if(TIM_GetFlag(UTIMER0,TIMER_ZC_IF))
{
TIM_ClearIRQFlag(UTIMER0,TIMER_ZC_IF);
Invers_GPIO(GPIO0,GPIO_Pin_6);
}
}


使用特权

评论回复
沙发
80后小老头| | 2023-12-31 09:10 | 只看该作者
03系列,倍频非48M,07系列,倍频非96M,喂狗失败,先天BUG

使用特权

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

本版积分规则

8

主题

86

帖子

2

粉丝