1

私はディスカバリー 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);
}
4

0 に答える 0