|
发表于 2012-10-20 23:57:57
|
显示全部楼层
这位仁兄,您好!风驰开发板的例程也有配置选项字的例程,在BEEP的例程里面,用到BEEP功能的各位大神都知道必须要进行选项字的设置,对选项字设置通常有两种方法,第一种是利用程序设置,见风驰例程BEEP的例程。第二种是利用ST-LINK在下载过程中进行设置,由于考虑到大家买ST-LINK的成本较高。风驰例程也是在用程来控制的。风驰的原本的例程是利用内部的16M是晶振,后来发现很多网友说想用外部24M的晶振,因此风驰现在对程序进行改版,由于工作量大,至今还没发布,下面公布一下风驰利用外部24M晶振的例程设置。只要大家利用风驰之前BEEP功能的例程稍微修改一下就可以的。
#define Flash_wait_OptionAddr 0x480D
#define FLASHWAITSTATE (uint8_t)(0x01)
void Set_Flash_wait_OptionByte(void)
{
uint16_t Flash_wait_Option_status;/*记录访问flash等待状态,为了调使用的*/
Flash_wait_Option_status=FLASH_ReadOptionByte(Flash_wait_OptionAddr);
/*Flash_wait_Option_status是一个16位,bit15~8的高8为,是Flash_wait_OptionAddr
地址的数据,其中bit15~9是保留的,因此是0,如果bit8是1,则表明访问flash要1一个周期的
访问周期,bit7~0的数据是Flash_wait_OptionAddr+1地址数据,跟bit15~8的数据是相反的,
在STM8里面,如果你使用外部时钟大于16M,小于24M的话,访问flash必须要配置Flash插入一个等待周期*/
printf("\r\nWAITSATATE状态:0x%X\r\n",Flash_wait_Option_status);
if((Flash_wait_Option_status&0x0100)==FALSE)
FLASH_ProgramOptionByte(Flash_wait_OptionAddr,FLASHWAITSTATE);
}
只要大家调用这个函数下载一次,之后就可以删掉这个函数了。直接可以初始化外部晶振了
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
这样就可以使用24M的外部晶振了,当使用24MHz时钟尽管插入了一个等待周期,但要记得全部外设(除Flash以外)的时钟配置都是以24MHz为基准计算;
主函数
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
/*!<Set High speed internal clock */
Uart_Init();
enableInterrupts() ;
printf("\r\n硬件平台为:%s\r\n","风驰 STM8 开发板");
UART1_SendString("Serial Communication ---STM8 Development Board of FengChi Electron ",\
sizeof("Serial Communication ---STM8 Development Board of FengChi Electron"));
Delay(0xffff);
UART1_SendByte('\n');
Delay(0xffff);
printf("\r\n时钟频率:%ld\r\n",CLK_GetClockFreq());
运行之后大家可以看到打印出来的数据24000000
注:风驰正在编写新一版的教程例程,都是基于外部24M晶振。新一版的例程和教程必定让大家震惊的................................
|
|