找回密码
 立即注册
楼主: JimOrange

STC32G12k128K 学习开始,打卡中~实验箱收到了~ !

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-06 11:13:12

24

主题

108

回帖

468

积分

中级会员

积分
468
发表于 2024-2-14 13:02:51 | 显示全部楼层
我就闹不清楚该怎么查看芯片手册,心里没有谱,不知道要查哪些寄存器,从哪儿找到查找指引
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-04-22 08:32:33

9

主题

76

回帖

537

积分

高级会员

积分
537
发表于 2024-2-15 08:05:16 | 显示全部楼层
垂柳*** 发表于 2024-2-14 13:02
我就闹不清楚该怎么查看芯片手册,心里没有谱,不知道要查哪些寄存器,从哪儿找到查找指引 ...

初学单片机都会有的疑惑,只能用到哪个功能再找找对应的寄存器,基本上都有功能都会有对应的寄存器管理。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-06 11:13:12

24

主题

108

回帖

468

积分

中级会员

积分
468
发表于 2024-2-15 12:20:03 | 显示全部楼层
谢谢33楼的鼓励
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-04-22 08:32:33

9

主题

76

回帖

537

积分

高级会员

积分
537
发表于 2024-2-16 00:15:22 | 显示全部楼层
本帖最后由 JimOrange 于 2024-2-17 07:08 编辑

第十六集:IO中断。太好了,之前我以为只有固定的几个按钮来实现按键的中断,原来STC支持普通的I/O中断。
端口中断模式寄存器PxIM1, PxIM0, 其中:
M1   M0
0      0    (下降沿中断)STC32G系统都不支持
0      1      (上升沿中断)STC32G系统都不支持
1      0      (低电平中断)
1      1     (高电平中断)

PxINTE: 端口中断使能(enable)寄存器、PxINTF:端口中断标志(flag)寄存器, 0为没有请求,1为有请求
截屏2024-02-16 22.48.41.png

通过工具,可以扩展中断源编号,其中引脚的序号已经规定好,不能乱用。
中断源优先级:先执行高优先级,如果同一优先级,先执行次序高的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-06 11:13:12

24

主题

108

回帖

468

积分

中级会员

积分
468
发表于 2024-2-16 08:49:18 | 显示全部楼层
今天温习第30集iic总线
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:527
  • 最近打卡:2025-05-06 06:40:44
已绑定手机

34

主题

459

回帖

2285

积分

金牌会员

积分
2285
发表于 2024-2-16 09:08:06 | 显示全部楼层
支持学习,共同进步。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-04-22 08:32:33

9

主题

76

回帖

537

积分

高级会员

积分
537
发表于 2024-2-16 17:17:45 | 显示全部楼层
jackf*** 发表于 2024-2-16 09:08
支持学习,共同进步。

谢谢~ 共同进步
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-04-22 08:32:33

9

主题

76

回帖

537

积分

高级会员

积分
537
发表于 2024-2-16 17:44:43 | 显示全部楼层
垂柳*** 发表于 2024-2-16 08:49
今天温习第30集iic总线

这么快,你是不是已经学完了一遍
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-04-22 08:32:33

9

主题

76

回帖

537

积分

高级会员

积分
537
发表于 2024-2-17 07:09:10 | 显示全部楼层
本帖最后由 JimOrange 于 2024-2-29 21:49 编辑

第十七集:模数转换器ADC。STC提供12位高速A/D转化器。使用ADC功能时,vref引脚千万不能悬空,一定要接到外部参考电压或者VCC上。
截屏2024-02-29 21.13.16.png
ADC_CONTR: ADC控制寄存器,其中有5个标志位,如下:
ADC_POWER: 0为关闭ADC电源,1为打开ADC电源
ADC_START: ADC启动位,需要ADC检查时,设置为1,完成后自动清零,手动清零不影响正在检测。
ADC_FLAG: ADC结束标志位。当完成ADC,硬件会置1,需要软件(手动)清零。

ADC_CHS[3:0]: 能使用ADC功能的引脚只有15个,分别:P1.0~P1.7(其中没有P1.2,用P5.4代替), P0.0~P0.6, 其中ADC_CHS:1111标志位为测试电压1.19V占用。 截屏2024-02-17 23.29.28.png
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
截屏2024-02-29 21.16.11.png
ADCCFG: ADC配置寄存器, 其中标志位RESFMT:ADC转换结果格式,0为左对齐,1为右对齐;标志位SPEED[3:0]:设置ADC时钟(0000~1111)+ 1 ###FADC = SYSclk / 2 / (SPEED + 1)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
截屏2024-02-29 21.19.19.png
ADCTIM: ADC时序控制寄存器,其中标志位CSSETUP:ADC通道选择时间控制,0为默认一个时钟,1为两个时钟;CSHOLD:ADC通道保持时间控制;SMPDUTY:ADC模拟信号采集控制,注意不能小于01010(时钟数为11)

截屏2024-02-18 21.37.27.png

12ADC转换速度 = SYSclk / 2 / (SPEED[3 : 0] + 1) / [ (CSSETUP + 1) + (CMPDUTY + 1) + (CSHOLD + 1) + 12]



2的12次方为4096.
截屏2024-02-18 21.40.44.png

高精度ADC参考线路图,用到的TL431(2.5V基准电压源),与一般精度ADC区别:

1.verf引脚接到2.5V,一般精度接到VCC;
2.原因:因为VCC有可能连接多个用电器,导致电压不稳。(高精度测试电压必须<= 2.5V)

ADC_RES: ADC转换结果寄存器。

示例代码:
///////////////////////////////////////////////////////
ADCTIM = 0x3f;        //设置ADC内部时序,0 0 1 1                1 1 1 1
                        //ADCTIM: ADC时序控制寄存器,
                        //其中标志位CSSETUP:ADC通道选择时间控制,0为默认一个时钟,1为两个时钟;
                        //CSHOLD:ADC通道保持时间控制;
                        //SMPDUTY:ADC模拟信号采集控制,注意不能小于01010(时钟数为11),这里设置为11111,也就是32 (31 + 1), 1(00000)
        
ADCCFG = 0x2f;        //设置ADC时钟为:系统时钟2/16 ,        0010        1111
                        //ADCCFG: ADC配置寄存器,       --x-  1111
                        //其中标志位RESFMT:ADC转换结果格式,0为左对齐,1为右对齐;
                        //标志位SPEED[3:0]:设置ADC时钟(0000~1111)+ 1
                        //FADC = SYSclk / 2 / (SPEED + 1)。
        
ADC_POWER = 1;        //使能ADC
float ADC_Read(u8 No)                //指定通道,返回12位ADC数值
{
        float res;
        ADC_CONTR &= 0xf0;        //清空低四位
        ADC_CONTR |= No;    //低四位,ADC_CHS[3:0],对应15个ADC通道

        ADC_START = 1;                //启动ADC转换
        _nop_();            //等待1个时钟
        _nop_();
        while (!ADC_FLAG);  //查询ADC完成标志,等待ADC转换结束
        ADC_FLAG = 0;                //清空ADC完成标志
        res = (ADC_RES << 8) + ADC_RESL;                     
        return res / 4096 * 2.5;
}
      
while (1)
{
        printf("当前ADC值:%0.2f\r", ADC_Read(0));    //对应P1.0通道
        delay_ms(500);
}









回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:130
  • 最近打卡:2025-04-22 08:32:33

9

主题

76

回帖

537

积分

高级会员

积分
537
发表于 2024-2-18 22:26:00 | 显示全部楼层
本帖最后由 JimOrange 于 2024-3-1 22:34 编辑

第十八集:先占楼。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-7 03:30 , Processed in 0.243748 second(s), 102 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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