STM8S105系列单片机管脚复用配置(选项字节的配置)
2017-08-14 15:36
537 查看
以STM8S105K4T6C为例,实现PB0管脚复用成TIM1_CH1N
(1)STM8S复用功能(芯片引脚加"[ ]"的功能):通过配置flash中的选项字节来实现
除了ROP(读出保护)字节,每个选项字节必须被保存两次,一个通常的格式(OPTx)和一个用来备份的互补格式(NOPTx)
参见STM8S105xx数据手册(如下图),可知备选功能重映射选项5(AFR5)负责管理PB0端口的重映射功能,将其设置为1即实现PB0重映射为TIM1_CH1N
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/18/0301e4400cd8ca598c6757c8e679dc47)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202009/18/2533e80559b620e3960df69cbd336d29)
相关代码:
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时,不能运行程序,否则会出现错误
一般不建议通过程序修改选项字节,容易出错
(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时,不能运行程序,否则会出现错误
一般不建议通过程序修改选项字节,容易出错
相关文章推荐
- STM8S105系列单片机的PWM输出配置
- STM8S105系列单片机管脚复用后不再支持正常功能使用
- STM8S---选项字节(Option Byte)写操作之IO复用
- 整理LPC2300系列单片机的UART配置相关
- STM8L15x系列单片机独立看门狗配置
- ASP.NET系列:自定义配置节点的复用
- ListActivity中的自定义列表配置选项『Android系列12』
- 单片机学习札记之7 STC15W系列的ADC配置
- STM8系列单片机复用引脚烧写程序注意事项
- 使用aspnet_regiis.exe 对配置字节的加密解密选项
- nginx系列-02-常用配置和优化选项
- STM8L151系列单片机PWM配置时注意事项
- 使用aspnet_regiis.exe 对配置字节的加密解密选项
- 瑞萨单片机教程(2013) -R8C系列 输入输出端口配置
- STM8L101系列单片机串口配置详解(基于IAR自带库)
- 【学习笔记】STC 12C系列1T单片机主频配置
- Keil(MDK-ARM)系列教程(四)_工程目标选项配置(Ⅱ)
- STM8S---选项字节(Option Byte)写操作之IO复用
- Keil(MDK-ARM)系列教程(四)_工程目标选项配置(Ⅱ)
- STM8S---选项字节(Option Byte)写操作之IO复用