首先,STC8H不需要外部晶振和外部复位,也可以外接。它的时钟4M-36M。和其它stc芯片的区别是它的运行速度够快,8路16位的高级pwm定时器,4路可以输出互补的脉冲信号,在用这个芯片的时候我发现手册上有些地方讲的不是太清楚,对照了32的手册才明白了原理,今天着重说一下高级定时器的那部分。
STC8H 系列的单片机内部集成了 8 通道 16 位高级 PWM 定时器,分成两组周期可不同的 PWM,分别命名为 PWMA 和 PWMB可分别单独设置。第一组 PWM/PWMA 可配置成 4 组互补/对称/死区控制的 PWM 或捕捉外部信号,第二组 PWM/PWMB 可配置成 4 路 PWM 输出或捕捉外部信号。
pwmA可配置成输出比较,输入捕获以及pwm模式,pwm有边沿对齐以及中间对齐模式,可直接驱动一些小型的电机,在驱动一些小型的电机时一定要将相应的io口配成推挽输出在,不然驱动不起来,具体的原理就不写了,主要说一下主要寄存器以及主要模式的配置。
PWMX--ENO主要是使能相应pwm的输出很简单。
PWMCR1--控制寄存器。选择计数器的模式,一般是边沿对齐。使能计数器以及预装载,计数器是最后使能,如果用pwm模式最好使能预装载,不然可能会出错。
PWM-- CCER1: CC1E 使能捕获 比较输出,CC1P =0 高电平有效,1低电平有效,通俗点就是==0,先输出高电平,先捕获上升沿;==1,先输出低电平,先捕获下降沿。
PWM --CCMR1,选是pwm模式还是其它模式,当CCER1 的 CC1E=0,设置此模式才有效。手册中pwm写到 PWM1时,在向上计数时,当PWMn_CNT<PWMn_CCR1时OCnREF输出高,否则OCnREF输出低;在向下计数时,当PWMn_CNT>PWMn_CCR1时,OCnREF输出低,否则OCnREF输出高。其实应该这样写,当PWM--CCER1的,CC1P=0时,这样是成立的。当CC1P=1,输出结果是和手册中写的反过来的。
另外当你输出为翻转模式时,PWMA_CCMR1不能写入while循环,不然不能正常输出。
另外还有刹车寄存器,以及中断寄存器IER、中断状态寄存器SR1,预分频器PSCR,捕获比较寄存器CCR1,也就是设占空比的,ARR设频率的寄存器等等,手册上写的很清除,就不一一介绍了。
输出模式配置步骤:
1. 选择计数器时钟(内部、外部或者预分频器(PSCR)),我用的都是内部。
预分频器看你想要输出的频率范围自己设置
2. 将相应的数据写入 PWMA_ARR(设频率) 和 PWMA_CCRi (设占空比)寄存器中。频率=时钟/(PSCR+1)/(ARR+1)
3. 如果要产生一个中断请求,设置 CCiIE 位,在中断判断SR1状态位,PWMA和PWMB不是一个中断号。
4. 选择输出模式步骤:
1. 设置 OCiM=011,在计数器与 CCRi 匹配时翻转 OCiM 管脚的输出
2. 设置 OCiPE = 0,禁用预装载寄存器
3. 设置 CCiP = 0,选择高电平为有效电平,开始输出高电平。
4. 设置 CCiE = 1,使能输出
5. 设置 PWMA_CR1 寄存器的 CEN 位来启动计数器。
输入捕获配置:
先设置PSCR,根据你的所测频率范围来设数据。设ARR一般为最大值
1.选择有效输入端,设置 PWMA_CCMR1 寄存器中的 CC1S=01,此时通道被配置为输入,并且PWMA_CCR1 寄存器变为只读。
2. 根据输入信号 TIi 的特点,可通过配置 PWMA_CCMR1 寄存器中的 IC1F 位来设置相应的输入滤波器的滤波时间。假设输入信号在最多 5 个时钟周期的时间内抖动,我们须配置滤波器的带宽长于 5 个时钟周期;因此我们可以连续采样 8 次,以确认在 TI1 上一次真实的边沿变换,即在PWMA_CCMR1 寄存器中写入 IC1F=0011,此时,只有连续采样到 8 个相同的 TI1 信号,信号才为有效(采样频率为 fMASTER)。
3. 选择 TI1 通道的有效转换边沿,在 PWMA_CCER1 寄存器中写入 CC1P=0(上升沿)。
4. 配置输入预分频器。在本例中,我们希望捕获发生在每一个有效的电平转换时刻,因此预分频器被禁止(写 PWMA_CCMR1 寄存器的 IC1PS=00)。
5. 设置 PWMA_CCER1 寄存器的 CC1E=1,允许捕获计数器的值到捕获寄存器中。
6. 如果需要,通过设置
PWMA_IER 寄存器中的 CC1IE 位允许相关中断请求。
7.使能计数器设置 PWMA_CR1 寄存器的 CEN 位来启动计数器。
以上内容就介绍到这,使用此芯片的感觉,除了速度没有32的快,其它相关功能大体上还是挺全面的,听说新出了STC32的芯片,还没有试过后续会测试一下。