第一次用这个IC,小批量试产一批,测试200个产品,有一个不正常。
分析半天,发现时钟只有正常的2/3速度,用的是HSI 32Mhz。烧录了一个翻转IO的简单程序确认过,实测约20Mhz。
怀疑是出厂HSI校正出错,或是校正数据掉了。
下附测试程序,MDK仿真时读出的OPTION区、出厂设置区数据:
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "hk32f030m.h"
#include "hk32f030m_gpio.h"
static void ledGpioInit(void);
static void ledGpioToggle(void);
static void softWareDelay(void);
#define LED_PIN GPIO_Pin_1
#define LED_PORT GPIOA
void delayus(uint32_t i)
{
i*=5;//1US
while(i--);
}
void delayms(uint32_t i)
{
delayus(740*i); //740
}
int main(void)
/* Infinite loop */
{
ledGpioInit();
while (1)
{
delayms(100);
ledGpioToggle();
// delayms(150);
// ledGpioToggle();
// delayms(150);
//p ledGpioToggle();
// delayms(1000);
// ledGpioToggle();
//// softWareDelay();
}
}
static void ledGpioInit(void)
{
GPIO_InitTypeDef m_gpio;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOD, ENABLE);
m_gpio.GPIO_Mode = GPIO_Mode_OUT;
m_gpio.GPIO_OType = GPIO_OType_PP;
m_gpio.GPIO_Pin = LED_PIN;
m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;
m_gpio.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(LED_PORT, &m_gpio);
}
static void ledGpioToggle(void)
{
LED_PORT->ODR ^= LED_PIN;
}
|