查看: 2049|回复: 5

扩展库使用说明——PCA

[复制链接]

22

主题

22

帖子

106

积分

注册会员

Rank: 2

积分
106
发表于 2021-3-2 16:12:35 | 显示全部楼层 |阅读模式
本帖最后由 陈哲东 于 2021-6-30 15:03 编辑

1.硬件概述

STC8G 系列单片机内部集成了 3 组可编程计数器阵列(PCA/CCP/PWM)模块,可用于软件定时器、 外部脉冲捕获、高速脉冲输出和 PWM 脉宽调制输出。

2.   PCA结构
PCA 内部含有一个特殊的 16 位计数器,3 组 PCA 模块均与之相连接。PCA 计数器的结构图如下:
1.png


3.   引脚说明
STC8G系列的芯片,如果引脚数量不相同的话,那么他们所对应的PCA的功能引脚也是不相同的。
在使能PCA的时候,带PCA功能的引脚将全部启用,并且要对这些引脚配置模式,一般是配置成双向I/O,或者是推挽输出。如果要将某个引脚的PCA功能关闭,那么就将相对应的引脚配置成高阻输入模式,即可关闭该引脚的PCA功能。



1614672282(1).jpg

例如选用STC8G1K08A-8Pin单片机,使能PCA功能的时候,那么P32、P33、P34都将会配置成PCA模式,同时也要将三个引脚配置成双向I/O或者是推挽输出。如果要将P32引脚取消PCA功能,那么就将P32引脚配置成推挽输入模式即可取消P32引脚的PCA功能。


1.     PCA初始化时钟、引脚、中断、优先级。根据芯片型号选择对应的引脚。

1614672565(1).jpg

2.     PCA通道初始化模式、宽度、中断模式、占空比。占空比为低电平时间。

1.png

3.     PCA实时更新占空比,占空比为低电平时间。

2.png

示例代码1

3.png

  1. #include <STC8HX.h>
  2. uint32 sys_clk = 24000000;//设置PWM、定时器、串口、EEPROM频率参数
  3. #include "mylib/STC8G_PCA.h"

  4. void setup()
  5. {
  6.   PCA_InitTypeDef PCA_InitStructure;

  7.   PCA_InitStructure.PCA_Clock    = PCA_Clock_1T; //PCA_Clock_1T, PCA_Clock_2T, PCA_Clock_4T, PCA_Clock_6T, PCA_Clock_8T, PCA_Clock_12T, PCA_Clock_Timer0_OF, PCA_Clock_ECI
  8.   PCA_InitStructure.PCA_IoUse    = PCA_IO_GROUP0; //PCA_IO_GROUP0, PCA_IO_GROUP1, PCA_IO_GROUP2
  9.   PCA_InitStructure.PCA_Interrupt_Mode = DISABLE; //ENABLE, DISABLE
  10.   PCA_InitStructure.PCA_Polity   = Polity_0;  //优先级设置 PolityHigh,PolityLow
  11.   PCA_InitStructure.PCA_RUN      = DISABLE; //ENABLE, DISABLE
  12.   PCA_Init(PCA_Counter,&PCA_InitStructure);

  13.   PCA_InitStructure.PCA_Mode     = PCA_Mode_PWM; //PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
  14.   PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_8bit;  //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
  15.   PCA_InitStructure.PCA_Interrupt_Mode = DISABLE; //PCA_Rise_Active, PCA_Fall_Active, ENABLE, DISABLE
  16.   PCA_InitStructure.PCA_Value    = 128 << 8;  //对于PWM,高8位为PWM占空比
  17.   PCA_Init(PCA0,&PCA_InitStructure);

  18.   PCA_InitStructure.PCA_Mode     = PCA_Mode_PWM; //PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
  19.   PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_8bit;  //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
  20.   PCA_InitStructure.PCA_Interrupt_Mode = DISABLE; //PCA_Rise_Active, PCA_Fall_Active, DISABLE
  21.   PCA_InitStructure.PCA_Value    = 128 << 8;  //对于PWM,高8位为PWM占空比
  22.   PCA_Init(PCA1,&PCA_InitStructure);

  23.   PCA_InitStructure.PCA_Mode     = PCA_Mode_PWM; //PCA_Mode_PWM, PCA_Mode_Capture, PCA_Mode_SoftTimer, PCA_Mode_HighPulseOutput
  24.   PCA_InitStructure.PCA_PWM_Wide = PCA_PWM_8bit;  //PCA_PWM_8bit, PCA_PWM_7bit, PCA_PWM_6bit, PCA_PWM_10bit
  25.   PCA_InitStructure.PCA_Interrupt_Mode = DISABLE; //PCA_Rise_Active, PCA_Fall_Active, DISABLE
  26.   PCA_InitStructure.PCA_Value    = 128 << 8;  //对于PWM,高8位为PWM占空比
  27.   PCA_Init(PCA2,&PCA_InitStructure);

  28.   P3M1&=~0x04;P3M0|=0x04;//推挽输出
  29.   P3M1|=0x08;P3M0&=~0x08;//高阻输入
  30.   P5M1|=0x10;P5M0&=~0x10;//高阻输入
  31.   CR = 1; //1: 允许PCA计数器计数,必须由软件清0。
  32. }

  33. void loop()
  34. {
  35.   UpdatePwm(PCA0, 200);
  36. }

  37. void main(void)
  38. {
  39.   setup();
  40.   while(1){
  41.     loop();
  42.   }
  43. }
复制代码

回复

使用道具 举报

1

主题

9

帖子

95

积分

注册会员

Rank: 2

积分
95
发表于 2021-3-3 16:19:09 | 显示全部楼层
希望楼主在多扩展讲下其他功能的用法,比如 外部脉冲捕获、高速脉冲输出
回复

使用道具 举报

2

主题

21

帖子

142

积分

注册会员

Rank: 2

积分
142
发表于 2022-6-10 13:07:41 | 显示全部楼层
啥时候实现对stc8g1k08a的全功能支持?
回复

使用道具 举报

0

主题

2

帖子

12

积分

注册会员

Rank: 2

积分
12
发表于 2022-6-20 10:27:57 | 显示全部楼层
貌似不支持10位PWM,
回复

使用道具 举报

0

主题

2

帖子

12

积分

注册会员

Rank: 2

积分
12
发表于 2022-6-20 21:03:45 | 显示全部楼层
yuchengcheng 发表于 2022-6-20 10:27
貌似不支持10位PWM,

我搞错了,原来支持的。。。UpDataPwm函数里有对高二位操作
回复

使用道具 举报

0

主题

2

帖子

10

积分

注册会员

Rank: 2

积分
10
发表于 2023-6-6 22:50:13 | 显示全部楼层
怎么改成高电平时间呢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|好好搭搭在线 ( © 好好搭搭在线 浙ICP备19030393号-1 )

GMT+8, 2024-4-18 21:46 , Processed in 0.342609 second(s), 29 queries .

Powered by Discuz!

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表