垂柳工作室 发表于 2024-2-14 13:02:51

我就闹不清楚该怎么查看芯片手册,心里没有谱,不知道要查哪些寄存器,从哪儿找到查找指引

JimOrange 发表于 2024-2-15 08:05:16

垂柳工作室 发表于 2024-2-14 13:02
我就闹不清楚该怎么查看芯片手册,心里没有谱,不知道要查哪些寄存器,从哪儿找到查找指引 ...

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

垂柳工作室 发表于 2024-2-15 12:20:03

谢谢33楼的鼓励

JimOrange 发表于 2024-2-16 00:15:22

本帖最后由 JimOrange 于 2024-2-17 07:08 编辑

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

PxINTE: 端口中断使能(enable)寄存器、PxINTF:端口中断标志(flag)寄存器, 0为没有请求,1为有请求


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

垂柳工作室 发表于 2024-2-16 08:49:18

今天温习第30集iic总线

jackfangxq 发表于 2024-2-16 09:08:06

支持学习,共同进步。

JimOrange 发表于 2024-2-16 17:17:45

jackfangxq 发表于 2024-2-16 09:08
支持学习,共同进步。

谢谢~ 共同进步{:4_245:}

JimOrange 发表于 2024-2-16 17:44:43

垂柳工作室 发表于 2024-2-16 08:49
今天温习第30集iic总线

{:4_250:}这么快,你是不是已经学完了一遍{:4_245:}

JimOrange 发表于 2024-2-17 07:09:10

本帖最后由 JimOrange 于 2024-2-29 21:49 编辑

第十七集:模数转换器ADC。STC提供12位高速A/D转化器。使用ADC功能时,vref引脚千万不能悬空,一定要接到外部参考电压或者VCC上。

ADC_CONTR: ADC控制寄存器,其中有5个标志位,如下:
ADC_POWER: 0为关闭ADC电源,1为打开ADC电源
ADC_START: ADC启动位,需要ADC检查时,设置为1,完成后自动清零,手动清零不影响正在检测。
ADC_FLAG: ADC结束标志位。当完成ADC,硬件会置1,需要软件(手动)清零。

ADC_CHS: 能使用ADC功能的引脚只有15个,分别:P1.0~P1.7(其中没有P1.2,用P5.4代替), P0.0~P0.6, 其中ADC_CHS:1111标志位为测试电压1.19V占用。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ADCCFG: ADC配置寄存器, 其中标志位RESFMT:ADC转换结果格式,0为左对齐,1为右对齐;标志位SPEED:设置ADC时钟(0000~1111)+ 1 ###FADC = SYSclk / 2 / (SPEED + 1)。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

ADCTIM: ADC时序控制寄存器,其中标志位CSSETUP:ADC通道选择时间控制,0为默认一个时钟,1为两个时钟;CSHOLD:ADC通道保持时间控制;SMPDUTY:ADC模拟信号采集控制,注意不能小于01010(时钟数为11)



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



2的12次方为4096.


高精度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:设置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,对应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);
}









JimOrange 发表于 2024-2-18 22:26:00

本帖最后由 JimOrange 于 2024-3-1 22:34 编辑

第十八集:先占楼。
页: 1 2 3 [4] 5 6
查看完整版本: STC32G12k128K 学习开始,打卡中~实验箱收到了~ !