找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 568|回复: 4
打印 上一主题 下一主题
收起左侧

STC32G12K128单片机向外部输出一个时钟时钟频率的请教

[复制链接]
跳转到指定楼层
楼主
本人最近在学习STC32G的单片机,需要单片机向外部输出一个时钟时钟频率分别是:100HZ、1KHZ、10KHZ、100KHZ     一共四种。这里想请教,STC32G12K128的单片机,LQFP64封装的,可以把内
部时钟分频或通过其它方法做到以上功能么,请各位大神指导并提供
方法,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:732794 发表于 2023-11-7 15:48 | 只看该作者
找他们的教程,PWM输出,或者时钟频率输出。
回复

使用道具 举报

板凳
ID:155507 发表于 2023-11-7 17:51 | 只看该作者

用STC32G12K128单片机主时钟分频输出,12MHz时钟 /255 /127 最低只能够到达 差不多370Hz。

STC32G12K128单片机主时钟分频输出
系统时钟控制器为单片机的 CPU 和所有外设系统提供时钟源,系统时钟有 4 个时钟源可供选择:内
部高精度 IRC、内部 32KHz 的 IRC(误差较大)、外部晶振、内部 PLL 输出时钟。用户可通过程序分别
使能和关闭各个时钟源,以及内部提供时钟分频以达到降低功耗的目的。




  1. //6.5.12 主时钟分频输出
  2. //测试工作频率为 12.0000MHz
  3. //#include "stc8h.h"
  4. #include "stc32g.h" //头文件见下载软件

  5. sbit    P10     =   P1^0;
  6. sbit    KEY     =   P3^2;

  7. //void delay()
  8. //{
  9. //        int i;
  10. //        for (i=0; i<100; i++);
  11. //}

  12. void Timer0_Init(void)                //5毫秒@12.000MHz
  13. {
  14.         AUXR |= 0x80;                        //定时器时钟1T模式
  15.         TMOD &= 0xF0;                        //设置定时器模式
  16.         TL0 = 0xA0;                                //设置定时初始值
  17.         TH0 = 0x15;                                //设置定时初始值
  18.         TF0 = 0;                                //清除TF0标志
  19.         TR0 = 1;                                //定时器0开始计时
  20.         ET0 = 1;                //使能定时器中断
  21.     EA = 1;       
  22. }
  23. void TM0_Isr() interrupt 1
  24. {
  25.     P10 = !P10;                                 //测试端口 100Hz
  26. }


  27. void main()
  28. {
  29.         unsigned char Stat=0;
  30.         Timer0_Init();
  31.         EAXFR = 1;                 //使能访问 XFR
  32.         CKCON = 0x00;         //设置外部数据总线速度为最快
  33.         WTST = 0x00;         //设置程序代码等待参数,
  34.                                         //赋值为 0 可将 CPU 执行程序的速度设置为最快
  35.         P0M0 = 0x00;
  36.         P0M1 = 0x00;
  37.         P1M0 = 0x00;
  38.         P1M1 = 0x00;
  39.         P2M0 = 0x00;
  40.         P2M1 = 0x00;
  41.         P3M0 = 0x00;
  42.         P3M1 = 0x00;
  43.         P4M0 = 0x00;
  44.         P4M1 = 0x00;
  45.         P5M0 = 0x00;
  46.         P5M1 = 0x00;
  47.        
  48.         //注:芯片上电后系统会默启动内部高速 HIRC,
  49.         //并选择为系统时钟,所以一般情况下不需要作
  50.         //如下设置
  51.         //HIRCCR = 0x80; //启动内部高速 IRC
  52.         //while (!(HIRCCR & 1)); //等待时钟稳定
  53.         //CLKSEL = 0x00; //时钟选择寄存器 选择内部高速 HIRC

  54.         //IRC48MCR = 0x80; //启动内部 48M IRC
  55.         //while (!(IRC48MCR & 1)); //等待时钟稳定
  56.         //CLKDIV = 0x02; //时钟 2 分频
  57.         //CLKSEL = 0x0c; //选择 IRC48M

  58.         //CLKSEL &= ~0x80; //选择 PLL 的 96M 作为 PLL 的输出时钟
  59.         // CLKSEL |= 0x80; //选择 PLL 的 144M 作为 PLL 的输出时钟
  60.         //USBCLK &= ~0x60;
  61.         //USBCLK |= 0x00; //PLL 输入时钟为 12M 则选择 1 分频
  62.         // USBCLK |= 0x20; //PLL 输入时钟为 24M 则选择 2 分频
  63.         // USBCLK |= 0x40; //PLL 输入时钟为 48M 则选择 4 分频
  64.         // USBCLK |= 0x60; //PLL 输入时钟为 96M 则选择 8 分频
  65.         //USBCLK |= 0x80; //启动 PLL
  66.         //delay(); //等待 PLL 锁频,建议 50us 以上
  67.         //CLKDIV = 0x04; //时钟 4 分频, 主时钟选择高速频率前,
  68.         //必须先设置分频系数,否则程序会当掉
  69.         //CLKSEL &= 0xf0; //选择 PLL 时钟源
  70.         //CLKSEL |= 0x04;

  71.         //HSCLKDIV = 0x00;
  72.         //CLKSEL &= ~0x40;         //选择主时钟( MCLK)作为高速外设时钟源

  73.         //CLKDIV:主时钟分频系数。系统时钟 SYSCLK 是对主时钟 MCLK 进行分频后的时钟信号(1~255)。
  74.         //CLKDIV = 0x02; //时钟 2 分频
  75.         //MCLKOCR : MCLKO_S[7] MCLKODIV[6:0] 0000000 不输出时钟 (1~127)
  76.         //MCLKO_S:系统时钟输出管脚选择
  77.         //0:系统时钟分频输出到 P5.4 口
  78.         //1:系统时钟分频输出到 P1.6 口

  79.         // MCLKOCR = 0x01; //主时钟输出到 P5.4 口
  80.         // MCLKOCR = 0x02; //主时钟 2 分频输出到 P5.4 口
  81.         //MCLKOCR = 0x04; //主时钟输出控制寄存器 主时钟 4 分频输出到 P5.4 口
  82.         // MCLKOCR = 0x84; //主时钟 4 分频输出到 P1.6 口
  83.        
  84.        
  85.        
  86.         while (1)
  87.         {
  88.                 if(KEY == 0)
  89.                 {
  90.                         Stat++;
  91.                     if(Stat==3)
  92.                                 Stat=0;
  93.                 }
  94.                 if(Stat==0)
  95.                 {
  96.                         CLKDIV = 0xF0; //时钟 240 分频
  97.                         MCLKOCR = 0x32; //主时钟输出控制寄存器 主时钟 50 分频输出到 P5.4 口 1KHz
  98.                        
  99.                 }
  100.                 if(Stat==1)
  101.                 {
  102.                         CLKDIV = 0xF0; //时钟 240 分频
  103.                         MCLKOCR = 0x05; //主时钟输出控制寄存器 主时钟 5 分频输出到 P5.4 口 10KHz
  104.                        
  105.                 }
  106.                 if(Stat==2)
  107.                 {
  108.                         CLKDIV = 0x78; //时钟 120 分频
  109.                         MCLKOCR = 0x01; //主时钟输出控制寄存器 主时钟 1 分频输出到 P5.4 口 100KHz
  110.                        
  111.                 }
  112.                
  113.         }
  114. }

复制代码






回复

使用道具 举报

地板
ID:61140 发表于 2023-11-8 10:42 | 只看该作者
angmall 发表于 2023-11-7 17:51
用STC32G12K128单片机主时钟分频输出,12MHz时钟 /255 /127 最低只能够到达 差不多370Hz。

STC32G12K1 ...

感谢您的回复
回复

使用道具 举报

5#
ID:61140 发表于 2023-11-11 21:18 | 只看该作者

有什么办法可以得到100HZ,1KHZ,10KHZ,100KHZ这四种频率,
或者有什么好的芯片么,哪怕只能得到四种基本矩形波都可以,后面我再想办法把波形弄成简谐波。
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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