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

[复制链接]
 楼主| 尹小舟 发表于 2023-7-31 10:42 | 显示全部楼层 |阅读模式
<
本帖最后由 尹小舟 于 2023-7-31 10:45 编辑

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

1a1e4746fa341d6d70b552e6d8a247d7

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改变
50efa658e29e35fd825866ffde59887c
GPIO功能测试
760bd1c296cdd89b0a49d94c0e230e3c
   内部无下拉,有上拉,数字信号经过一个三态门输出,输入通过一个与门进入芯片内部,模拟信号通
过一个约200Ω的电阻串联直接连接到PAD,数字信号经过一个三态门输出
  1. #include "lks32mc07x_lib.h"

  2. #include "hardware_init.h"

  3. int main(void)

  4. {

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

  6. for (;;)

  7. {

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

  9.       SoftDelay(0xFFFFF);

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

  11.       SoftDelay(0xFFFFF);

  12. }

  13. }

  14. void Hardware_init(void)

  15. {

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

  17.        SYS_WR_PROTECT = 0x7a83;

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

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

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

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

  22. }

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

  24. void GPIO_init(void)

  25. {

  26.        GPIO_InitTypeDefGPIO_InitStruct;

  27.        GPIO_StructInit(&GPIO_InitStruct);

  28.        GPIO_StructInit(&GPIO_InitStruct);
  29.    
  30.        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;

  31.        GPIO_InitStruct.GPIO_Pin= GPIO_Pin_6;

  32.        GPIO_Init(GPIO0, &GPIO_InitStruct);

  33. }

下载是使用的合宙的DAP
10c5330c17db326408f6db12e6528c11
逻辑分析仪采集到GPIO翻转
a184153dc71823694f6a7196de7c3ed3
定时器定时功能
f630066c2e8c8b2e3a94c422f314cd83
  1. #include "hardware_init.h"
  2. void Hardware_init(void);
  3. uint8_t Invers_GPIO(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
  4. {
  5. <p style="line-height: 30px; text-indent: 2em;">u16 reg;
  6.       reg = GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin); //读GPIO电平
  7.      if (reg)
  8.      {
  9.           GPIO_ResetBits(GPIOx, GPIO_Pin);
  10.           return 0;
  11.      }
  12.      else
  13.     {
  14.           GPIO_SetBits(GPIOx, GPIO_Pin);
  15.          return 1;
  16.      }</p>}
  17. int main(void)
  18. {
  19.       Hardware_init();                         //硬件初始化
  20.       for(;;)
  21.       {
  22.            SoftDelay(100);
  23.        }
  24. }

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

主题

94

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

8

主题

94

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部