以STM8S105K4T6C为例,实现PB0管脚复用成TIM1_CH1N
(1)STM8S复用功能(芯片引脚加"[ ]"的功能):通过配置flash中的选项字节来实现
除了ROP(读出保护)字节,每个选项字节必须被保存两次,一个通常的格式(OPTx)和一个用来备份的互补格式(NOPTx)
参见STM8S105xx数据手册(如下图),可知备选功能重映射选项5(AFR5)负责管理PB0端口的重映射功能,将其设置为1即实现PB0重映射为TIM1_CH1N
相关代码:
void Flash_Init()
{
FLASH_DeInit(); //恢复FLASH相关寄存器到默认值
FLASH_Unlock(FLASH_MEMTYPE_DATA); //解锁数据EEPROM
FLASH_ProgramOptionByte(0x4803, 0x20); //选项字节 打开PB0的复用功能
FLASH_ProgramOptionByte(0x4804, 0xDF);
}
(2)TIM1_CH1N是TIM1_CH1的互补输出比较
TIM1_CH1N是TIM1_CH1的反相,可用于TIM1的同步PWM模式
当只选择TIM1_CH1N输出PWM时,需要Disable输出比较,Enable互补输出比较
相关代码:
void Time1_Init()
{
CLK->CKDIVR=0x00;
TIM1_TimeBaseInit(1599,TIM1_COUNTERMODE_UP,5000,0); //分频1600,向上计数,TIM1_ARR=20000,重复计数器为0
/*OC1初始化:PWM1模式
输出不使能
互补输出使能
CCR1=8000,占空比为50%
输出有效极性为高(无作用
互补输出有效极性为高
空闲时输出高(无作用)
空闲时互补输出高
*/
TIM1_OC1Init(TIM1_OCMODE_PWM1,
TIM1_OUTPUTSTATE_DISABLE,
TIM1_OUTPUTNSTATE_ENABLE,
5000,
TIM1_OCPOLARITY_HIGH,
TIM1_OCNPOLARITY_HIGH,
TIM1_OCIDLESTATE_SET,
TIM1_OCNIDLESTATE_SET);
TIM1_OC1PreloadConfig(ENABLE);
TIM1_CtrlPWMOutputs(ENABLE); //PWM输出使能
TIM1_Cmd(ENABLE); //定时器开始计数
}
选项字节的配置一般有两种方式:
(1)使用STlink修改选项字节
打开STVP进行相关设置,可参见
https://wenku.baidu.com/view/205181b2d0d233d4b14e69fa.html
(2)通过程序修改选项字节
实现程序擦Option Bytes时,不能运行程序,否则会出现错误
一般不建议通过程序修改选项字节,容易出错