首页 > 解决方案 > stm8s cco 标志从未设置

问题描述

我有一个发现 stm8s003k 板,当我测试一个程序的 cco 功能时,似乎 cco 永远不会稳定,程序总是保持一致:while(CLK_GetFlagStatus(CLK_FLAG_CCORDY) == FALSE); 代码和更多解释是详细的。

我用下面的代码测试了它,我什至改变了更低和更高频率的预分频器,我还用外部晶体检查它(并更改代码),但它while(CLK_GetFlagStatus(CLK_FLAG_CCORDY) == FALSE);永远存在。

当我在程序启用CCOEN位后调试代码并在调试器环境中单步执行时,输出将开始并且频率为真。但标志CCORDYCCOBSY 都保持设置(调试器中的CCOR=0x69)并且它始终保持在 while 循环中。我的代码是:

#include "STM8S.h"
#define LED_pin                      GPIO_PIN_0
#define LED_port                     GPIOD

void setup(void);
void clock_setup(void);
void GPIO_setup(void);

void main(void)
{
  setup();
  GPIO_WriteLow(LED_port, LED_pin);
  while(TRUE){};
}

void setup(void)
{
  clock_setup();
  GPIO_setup();
}

void clock_setup(void)
{
  CLK_DeInit();
  CLK_HSECmd(DISABLE);
  CLK_LSICmd(DISABLE);
  CLK_HSICmd(ENABLE);

  while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == FALSE);

  CLK_ClockSwitchCmd(ENABLE);
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8);
  CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV4);
  CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI,
  DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, DISABLE);
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, DISABLE);
  CLK_CCOConfig(CLK_OUTPUT_CPU);
  CLK_CCOCmd(ENABLE);

  while(CLK_GetFlagStatus(CLK_FLAG_CCORDY) == FALSE);
}

void GPIO_setup(void)
{                              
  GPIO_DeInit(LED_port);
  GPIO_Init(LED_port, LED_pin, GPIO_MODE_OUT_OD_HIZ_FAST);
}

标签: cmicrocontrollerstm8

解决方案


推荐阅读