最近做了一款产品,使用STM8S003F3的片子,产品要求使用TIM2,在PD2引脚输出PWM波形。
安装了STM8专用版的IAR,下载了STM8的库文件,新建了工程,开始编写功能。
由于没有STM的经验,也是查阅了大量资料,花了1天时间搭建环境,写了一个简单的IO口定时输出高低电平的测试程序进行测试,用库文件,GPIO控制还算简单。
但是在接下来的一步,采用TIM2,在PD2引脚上输出波形时,出了问题。怎么配置都没有波形输出,上网查资料,才知道原来TIM2的CH3通道,有两路,一路是PA3,一路是PD2,GPIO复用,需要配置复用资源。量了量PA3,该引脚有输出,TIM2的初始化代码如下:
// init timer1 /1 perscaler-16MHz/up counter mode
// /time overload value/start at 0
TIM2_TimeBaseInit( TIM2_PRESCALER_1 , 16 );
// interrupt config and enable
TIM2_ITConfig( TIM2_IT_UPDATE, ENABLE );
// enable auto reload
TIM2_ARRPreloadConfig( ENABLE );
// 50% pulse width
TIM2_OC3Init( TIM2_OCMODE_PWM2, TIM2_OUTPUTSTATE_ENABLE, 8,
TIM2_OCPOLARITY_LOW );
TIM2_CCxCmd( TIM2_CHANNEL_3, ENABLE );
TIM2_OC3PreloadConfig( ENABLE );
// start timer
TIM2_Cmd( ENABLE );
// start interrupt
__enable_interrupt();
STM8片子如图所示:
找到原因后,那就找相应的解决办法就行了,先查了查STM8库文件的帮助手册,查阅相关函数,没有发现跟复用引脚有关的函数,然后查了查STM8的中文数据手册,手册上关于复用的那一页真凑巧没了,一脸黑线。上网查了查,找到了解决方法,直接在升级工具STVP上修改引脚复用配置即可。具体配置如下:
首先选择要升级的程序,然后点击【OPTION BYTE】按钮,在该界面的AFR1后边,点小三角,选择如图中红框的配置(其他复用可自行查看),选择好后,点击下载,完成后,GPIO复用配置就OK了,使用示波器量了量,成功在PD2上输出了PWM波,而PA3上的PWM波则没有了。