【CW32L052R8T6评估板测评】四、程序开发-->1、开发初始构建
[复制链接]
本帖最后由 皓月光兮非自明 于 2023-8-14 20:50 编辑
【CW32L052R8T6评估板测评】四、程序开发-->1、开发初始构建
【上周下载时遭遇的灾难】
在手册中了解到CW32L052仅仅支持SWD/ISP下载,
图0-1 手册中关于下载的描述
图0-1 提到出厂就已经设置为SWD模式了。但防止出错导致串口失效,我特意配置一遍SWD使能做保险
图0-2 SWD配置寄存器
根据图0-2 可知SWD配置位在系统控制寄存器SYSCTRL_CR2中的[1:1]位,应当设为0。
但当我对SWD引脚进行配置后Dap-Link无法下载了。
图0-3 RCC_SWDIO_Config配置函数
在芯源的支持下重新烧录成功,但验证后并非该语句引起,且场景无法复现,无法锁定问题存在点,推测原因有二:
推测一:重复定义SWD引脚有概率导致抽风?
推测二:在下载过程中连接中断,导致数据污染程序错乱,指向不安全区域导致宕机?
故而建议不要轻易操作SWD,否则容易好几天凉透。。
芯源的支持大大们提供的解决方案是:先按住复位键,再点LOAD的同时,放开复位键。
正文
1、时钟配置
2、IO配置
在用户手册中有四条APB,在提供的头文件中仅有APB1、APB2,不知是否4总线设计是否据实,或者是APB两个寄存器组能放置这么多外设为了节省资源就仅写了APB1、2的结构体。
图1-1 四总线设计是否据实?
需求:
我们需要PA15、PC15控制LED灯进行程序运行显示,以验证程序是否下载成功,或者程序是否正常执行。
需要按键Key1、2作为外部输入方便后面输入一些功能响应。
需要提供输出时钟验证,查看频率是否符合预期。
1、时钟配置
评估板置有外部高低速晶振,此处使用外部晶振做内部时钟源
图1-2 时钟树
注意:由图2 时钟树可知CW32L052没有倍频器,所以最高仅能使用1:1输出,当使用外部晶振时最高输入输出频率为32MHz,仅使用内部振荡器时才能达到最高48MHz的工作频率。
图1-3 外部晶振配置描述
时钟配置
void RCC_Configuration(void)
{
// 使能外部低速振荡时钟,正常时钟频幅,正常驱动输出
RCC_LSE_Enable(RCC_LSE_MODE_OSC, RCC_LSE_AMP_NORMAL, RCC_LSE_DRIVER_NORMAL);
// 使能外部高速振荡时钟,16MHz,正常驱动输出,滤波器关闭
RCC_HSE_Enable(RCC_HSE_MODE_OSC,16000000,RCC_HSE_DRIVER_NORMAL,RCC_HSE_FLT_CLOSE);
// 总线时钟分频器设置1/1
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
// 外设时钟分频器设置1/2
RCC_PCLKPRS_Config(RCC_PCLK_DIV2);
// 设置FLASH读写周期
FLASH_SetLatency(FLASH_Latency_2);
// 系统时钟采用外部高速时钟源
RCC_SysClk_Switch(RCC_SYSCLKSRC_HSE);
// 系统时钟更新
RCC_SystemCoreClockUpdate(16000000);
//开设时钟
CW_SYSCTRL->AHBEN |= (SYSCTRL_AHBEN_GPIOA_Msk|SYSCTRL_AHBEN_GPIOC_Msk|SYSCTRL_AHBEN_FLASH_Msk);
CW_SYSCTRL->APBEN1 |= SYSCTRL_APBEN1_GTIM1_Msk;
}
2、IO配置
图2-1 IO内部结构图
IO配置
图2-2 MCO引脚PC05
void GPIO_Configuration(void)
{
//LED1
CW_GPIOA->ANALOG &= ~GPIOx_ANALOG_PIN15_Msk;
CW_GPIOA->DIR &= ~GPIOx_DIR_PIN15_Msk;
CW_GPIOA->OPENDRAIN &= ~GPIOx_OPENDRAIN_PIN15_Msk;
PA15_SETLOW();
//LED2
CW_GPIOC->ANALOG &= ~GPIOx_ANALOG_PIN10_Msk;
CW_GPIOC->DIR &= ~GPIOx_DIR_PIN10_Msk;
CW_GPIOC->OPENDRAIN &= ~GPIOx_OPENDRAIN_PIN10_Msk;
PC10_SETHIGH();
//KEY1
CW_GPIOA->ANALOG &= ~GPIOx_ANALOG_PIN4_Msk;
CW_GPIOA->DIR |= GPIOx_DIR_PIN4_Msk;
CW_GPIOA->PUR |= GPIOx_DIR_PIN4_Msk;
CW_GPIOA->PDR &= ~GPIOx_ANALOG_PIN4_Msk;
CW_GPIOA->FALLIE |= GPIOx_DIR_PIN4_Msk;
//KEY2
CW_GPIOA->ANALOG &= ~GPIOx_ANALOG_PIN2_Msk;
CW_GPIOA->DIR |= GPIOx_DIR_PIN2_Msk;
CW_GPIOA->PUR |= GPIOx_DIR_PIN2_Msk;
CW_GPIOA->PDR &= ~GPIOx_ANALOG_PIN2_Msk;
CW_GPIOA->FALLIE |= GPIOx_DIR_PIN2_Msk;
//BEEP
CW_GPIOA->ANALOG &= ~GPIOx_ANALOG_PIN5_Msk;
CW_GPIOA->DIR &= ~GPIOx_DIR_PIN5_Msk;
CW_GPIOA->OPENDRAIN &= ~GPIOx_OPENDRAIN_PIN5_Msk;
//HCLK检测端口
CW_GPIOC->ANALOG &= ~GPIOx_ANALOG_PIN5_Msk;
CW_GPIOC->AFRL_f.AFR5=3;
CW_GPIOC->DIR &= ~GPIOx_DIR_PIN5_Msk;
CW_SYSCTRL->MCO = (uint32_t)(RCC_MCO_SRC_HCLK | RCC_MCO_DIV1);
}
图2-3 PC05捕获的总线频率
每周期约为62ns,1s/62ns=16129032Hz≈16MHz,时钟输出配置验证正确
|