KE02芯片调试记录
前言
该文章主要记录KE02系列芯片在使用过程中遇到的问题,为了防止时间长了,会形成遗忘,特此记录。如有问题,欢迎在评论指出和讨论。
以下是本篇文章正文内容
一、关于配置问题
1.1 UART串口配置
拦路虎记录:发现现有程序工程跟STM32不同,无法直接对引脚进行映射,配置相关引脚的串口模式,例如UART0有PTB0 and PTB1这一组,还有PTA2 and PTA3这一组,不知道怎么选择。
代码如下:
void uart_fun_test(void)
{
UART_ConfigType sConfig,sConfig1;
sConfig.u32SysClkHz = BUS_CLK_HZ; // 设置UART模块时钟源为BUS_CLK
sConfig.u32Baudrate = UART_BITRATE_9600; // 设置波特率为9600
UART_Init(UART1,&sConfig); // 初始化UART1
sConfig1.u32SysClkHz = BUS_CLK_HZ;
sConfig1.u32Baudrate = UART_BITRATE_115200; // 设置波特率为115200
SIM->PINSEL |= (1 << 7);
UART_Init(UART0,&sConfig1); // 初始化UART0
UART_EnableInterrupt(UART1,UART_RxBuffFullInt); // 使能接收中断
NVIC_EnableIRQ(UART1_IRQn);
UART1->S2 |= 1 << 6; // 清接收中断标志
UART_EnableInterrupt(UART0,UART_RxBuffFullInt); // 使能接收中断
NVIC_EnableIRQ(UART0_IRQn);
UART0->S2 |= 1 << 6;
// SIM->PINSEL |= (1 << 7); // 设置UART0_RX引脚为PTA2,UART0_TX引脚为PTA3
// UART_Init(UART0,&sConfig); // 初始化UART0
// UART_EnableInterrupt(UART0,UART_RxBuffFullInt); // 使能接收中断
// NVIC_EnableIRQ(UART0_IRQn);
// UART0->S2 |= 1 << 6; // 清接收中断标志
// UART_PutChar(UART0, 'a');
}
可以发现代码部分只有时钟源和波特率的配置,并没有跟STM32那种可以选择引脚,并将引脚配置成复用功能。
后来,发现自己忽略的注释代码中的语句,如下所示。SIM->PINSEL,通过Pin Selection Register ,置高置低进行显示。很简单的问题,浪费了不少时间,不太应该。
SIM->PINSEL |= (1 << 7); //设置UART0_RX引脚为PTA2,UART0_TX引脚为PTA3
小结:在芯片配置的时候,应该多看看数据手册,参考手册,了解大概配置过程,避免出现纰漏。
1.2 ICS内部时钟配置
内部参考时钟(IRC)是可校准的,可用作FLL 的参考时钟,也可直接用作CPU 和总线时钟的时钟源。
该内部参考时钟不需要校准电容或电阻等外部元件。IRC 是由9 位ICS 寄存器的值校准,它提供典型分辨率
为0.1%的未校准的IRC 频率。与其他内部参考不同,该IRC 可被校准为31.25kHz 到39.06kHz 的频率范
围。作为FLL 参考使用时,允许用户将总线频率设置为8MHz ~ 10MHz 间的任意值,分辨率为0.1%。校准
后,校准频率的典型误差为+0.5%~ -1%,最大也只有± 2%。
/* FEI mode by default */
#if defined(CPU_KE02)
if(((ICS->C2 & ICS_C2_BDIV_MASK)>>5) != 1)
{
ICS->C2 = (ICS->C2 & ~(ICS_C2_BDIV_MASK)) | ICS_C2_BDIV(1);
}
#else
ICS->C2 = (ICS->C2 & ~(ICS_C2_BDIV_MASK)) | ICS_C2_BDIV(0);// FLL输出时钟不分频,系统时钟为40MHz
#endif
二、其他
1.
代码如下(示例):
2.
代码如下(示例):
总结
总结:
MKE02系列单片机数据手册: