我实际项目证明,stm8s是可以的,stm32就有问题(需要注意配置处理)
我的一个项目用的是stm8s003f3
先说一下我的程序:
PC6用作PWM 口
#define pwm_on GPIO_WriteLow (GPIOC, GPIO_PIN_6)
#define pwm_off GPIO_WriteHigh (GPIOC, GPIO_PIN_6)
PC6 IO口配置:
GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_FAST ); //推挽输出
初始化TIM1相关参数,以配置PWM相关参数
然后在STVP中对 option byte 中的 AFR0设置PC6为PWM输出。
然后,在程序中,
使用 TIM1_Cmd(ENABLE);TIM1_CtrlPWMOutputs(ENABLE);能使PC6输出PWM
同时,使用
pwm_on (#define pwm_on GPIO_WriteLow (GPIOC, GPIO_PIN_6) )
pwm_off (#define pwm_off GPIO_WriteHigh (GPIOC, GPIO_PIN_6))
直接IO操作,也能对IO 置高置低,实践证明完全没有问题。
对于是否能作为普通的输入IO,没有实际操作过,理论是应该也是可以的。有兴趣可以试下,大体思路:
在需要用作输入口的的时候
先关闭PWM输出: TIM1_Cmd(DISABLE);TIM1_CtrlPWMOutputs(DISABLE);
然后重新配置:
GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_IN_PU_NO_IT );
在需要用作PWM输出的时候:
GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_FAST ); //推挽输出
TIM1_Cmd(ENABLE);TIM1_CtrlPWMOutputs(ENABLE);能使PC6输出PWM
也就是分时复用。 |