[STM8] 想通过单片机产生PWM

[复制链接]
2268|20
 楼主| feiqi1 发表于 2018-2-3 13:53 | 显示全部楼层 |阅读模式
想通过单片机产生PWM ,用AD采样来实时改变PWM占空比。   
void PWM2(int y)
{
  P2DIR |= BIT4+BIT5;                         // P2.4  2.5  输出
  P2SEL |= BIT4+BIT5;                         // P1.2 and P1.3 options select
  TA2CCR0 = 128;                            // PWM 周期
  TA2CCTL1 = OUTMOD_7;                        // 增计数模式
  TA2CCR1 = y;                                // CCR1 PWM 占空比
  TA2CCTL2 = OUTMOD_3;                        // CCR2 reset/set
  TA2CCR2 = y;                             // CCR2 PWM duty cycle
  TA2CTL = TASSEL_2 + MC_1 + TACLR+ID_3;           // SMCLK, up mode, clear TAR
}

请问调整占空比,是每次都调用PWM2(y)函数还是直接改变  TA2CCR1  TA2CCR2的值,  这个函数需要放在中断里还是只运行一次就行??
androidbus 发表于 2018-2-3 13:54 | 显示全部楼层

貌似要先暂停PWM输出,才能改变PWM配置寄存器的值吧?
litengg 发表于 2018-2-3 14:00 | 显示全部楼层
建议好好看下单片机的手册吧
qiangweii 发表于 2018-2-3 14:01 | 显示全部楼层
直接覆盖,CCRx写值就行了
shashaa 发表于 2018-2-3 14:05 | 显示全部楼层
要是定时器没记完数呢?    定时器计数的时候中断会停止它吗?
xia00 发表于 2018-2-3 14:06 | 显示全部楼层
直接修改寄存器就行。
hfdy01 发表于 2018-2-3 14:10 | 显示全部楼层
这个直接写成函数最简单。
CallReceiver 发表于 2018-2-3 14:12 | 显示全部楼层
这个如果初始化配置之后,直接改变TA2CCR1  TA2CCR2的值
boy1990 发表于 2018-2-3 14:18 | 显示全部楼层
最简单就是直接宏定义。
sourceInsight 发表于 2018-2-3 14:22 | 显示全部楼层
androidbus 发表于 2018-2-3 13:54
貌似要先暂停PWM输出,才能改变PWM配置寄存器的值吧?

正常的控制不是直接修改寄存器吗?
caijie001 发表于 2018-2-4 08:47 | 显示全部楼层
可以进入库函数里面看看别人的寄存器操作
emco 发表于 2018-2-18 20:40 | 显示全部楼层
可以直接写成函数
zhuotuzi 发表于 2018-2-19 16:53 | 显示全部楼层
8楼很对,初始化函数可以和设置分开写,这样调用函数就行。
stm32jy 发表于 2018-2-21 12:32 | 显示全部楼层
库函数比较简单,看下别的的代码就行
dongnanxibei 发表于 2018-2-21 21:11 来自手机 | 显示全部楼层
我不喜欢库函数,名字不好记
Rollo 发表于 2018-2-22 16:24 | 显示全部楼层
改变TA2CCR1  TA2CCR2的值就可以了
Stannis 发表于 2018-2-23 12:35 | 显示全部楼层
定时器计数的时候中断会停止它吗
Soraka 发表于 2018-2-23 13:46 | 显示全部楼层
修改寄存器啊
lefeng 发表于 2018-2-23 15:13 | 显示全部楼层
直接宏定义试试看
caijie001 发表于 2018-2-23 16:30 | 显示全部楼层
androidbus 发表于 2018-2-3 13:54
貌似要先暂停PWM输出,才能改变PWM配置寄存器的值吧?

不,有个是外部调用改变占空比的函数,可以设置选择当前周期改变还是下一个周期改变占空比
您需要登录后才可以回帖 登录 | 注册

本版积分规则

424

主题

1616

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部