这阵子在自学STM8,芯片是STM8S103F3,除了DataSheet和参考手册外,用的就是范洪刚老师的《STM8单片机自学笔记》了,挺好的一本书,推荐初学者也可以看看。
不过因为芯片不一致,书中采用的是STM8S208好像是,所以在做这本书的"7.2.1节 定时器外部时钟模式1"的实验时,我一直没能调试出想要的结果,即PC7一直没工作。用逻辑分析仪检查引脚,发现引脚上是一直有输入信号的,也就是软件或者芯片的问题。同时鉴于能运行其他程序,因而芯片没问题,肯定是软件设置的问题,于是我看了用户参考手册,发现手册上的操作内容完全和笔记上的一样,这让我就纳闷了,为啥正确的代码未能正常工作?
之后我重新看了Datasheet,发现TIM1_CH2是被[]括起来的,如下。看了下面的注释3,也就知道了解决方案,那就是需要通过特殊的操作才能启用这个功能,而不是直接就能使用的。通过网络,可以了解到通过操作Option Byte实现引脚的复用功能。
我是需要启用PC7的TIM1_CH2,根据Datasheet和用户手册的说明,得到如下代码:
[mw_shl_code=c,true]/* Remap the PC7 as TIM1_CH2 */
//unlock the flash
do
{
FLASH->DUKR = 0xAE;
asm( "nop" );
FLASH->DUKR = 0x56;
asm( "nop" );
}while( !(FLASH->IAPSR & 0x08) );
//enable writing the flash
FLASH->CR2 = 0x80;
FLASH->NCR2 = 0x7f;
//operation of the option bytes
*((u8*) 0x4803) = 0x01;
*((u8*) 0x4804) = ~(0x01);
//lock the flash
FLASH->IAPSR &= 0xF7; [/mw_shl_code]
因为只是演示如何操作Option Byte,所以也没有怎么写好代码,这段代码可以直接使用。
|