找回密码
 立即注册
楼主: 惦饭宝

32G12K128学习打卡记录 加油GOGOGO!

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:510
  • 最近打卡:2025-05-09 00:40:40
已绑定手机

1

主题

836

回帖

1529

积分

金牌会员

积分
1529
发表于 2024-9-25 14:16:28 | 显示全部楼层
靡不有初,鲜克有终
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2024-10-23 17:26:58

5

主题

19

回帖

209

积分

中级会员

积分
209
发表于 2024-9-25 20:45:07 | 显示全部楼层
本帖最后由 惦*** 于 2024-9-27 19:28 编辑
惦饭宝 发表于 2024-9-22 19:51
第十五集:外部中断👌😄

一.中断和中断系统

最近做比赛去了,实在没啥精力去学了,大概停更一周左右,我会回来的😭
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2024-10-23 17:26:58

5

主题

19

回帖

209

积分

中级会员

积分
209
发表于 2024-9-27 20:04:59 | 显示全部楼层
本帖最后由 惦*** 于 2024-10-4 08:57 编辑
惦饭宝 发表于 2024-9-25 20:45
最近做比赛去了,实在没啥精力去学了,大概停更一周左右,我会回来的😭 ...

第十六集:I/O中断🕵️‍♀️

一.什么是I0中断?
    在STC32G中,普通 I/0 口均可中断,不是传统外部中断
    截图202409271935041536.jpg
    STC32G 系列支持所有的 I/0 中断,且支持4种中断模式:下降沿中断、上升沿中断、低电平中断、高电平中断。每组 I/0 口都有独立的中断入口地址,且每个 I0 可独立设置中断模式
    中断是指,在程序运行过程中,系统出现一个必须由CPU立即处理的情况,此时CPU暂时中止程序的执行转而处理这个新情况的过程叫做中断。
    I/O中断通过中断处理器执行中断操作。当外部设备的I/O模块准备好时,它会发送给CPU一个中断信号,CPU则会“立即”做出响应,暂停当前程序的处理去服务该I/O设备的程序。
二.10中断的用法
    截图202409271939438668.jpg
    截图202409271940455563.jpg
    要做哪个端口的中断就查上面的表格来设置对应位的数值,同时还要对端口中断使能寄存器开启对应的使能。
    截图202409271944176490.jpg
     .......
三.中断优先级的设置
    中断初始化:

    void P3Exit_Init(void)    {
        P3IM0 = 0X00;
        P3IM1 = 0XFF;                        //低电平中断
        P3INTE = 0X20;                        //p35中断  0010 0000
    }

    配置中断号:
void P3Exit_Isr(void) interrupt 40

    {
        u8 intf;
        intf = P3INTF;
        if( intf )
        {
        P3INTF = 0;                     //清空中断标志位,必须软件清0
        if( intf & 0x01 )                //p30按下
            {

            }
        }
    }
    注意:在中断中千万不能加入延时

    中断优先级:相同优先级,靠前的中断源先执行执行完 之后在执行低中断源,且一个中断源在执行的时候不能被打断。定时器0和P3中断都是最低优先级:定时器0中断号1,P3中断号40,执行完定时器0,在执行P3,在执行定定时器0,在执行...
    截图202410040832404240.jpg

    截图202410040833548180.jpg


    编译时出现中断号超出31的报错,根据官方网址内容,使用下述软件拓展即可

    关于中断号大于31在Keil中编译出错的处理-深圳国芯人工智能有限公司 (stcai.com)

    拓展Keil的C代码中断号.exe (24 KB, 下载次数: 92)

四.实战小练
    简易中央门禁控制系统
    1.用8个按键代表每个门的门锁开关,8个LED作为每个门的工作状态,点亮表示门已经打开,熄灭表示门关闭。
    2.如遇突发火灾,按下应急按钮立刻打开所有门锁,方便人逃生。
    3.按下应急按钮后,所有按钮门锁不能上锁
    4.松开应急按钮后,倒计时5秒后恢复之前的状态,并可以操作门锁:










回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:29
  • 最近打卡:2024-10-23 17:26:58

5

主题

19

回帖

209

积分

中级会员

积分
209
发表于 2024-10-5 08:34:25 | 显示全部楼层
本帖最后由 惦饭宝 于 2024-10-5 08:35 编辑

第十七集:模数转换器ADC上🕵️‍♂️
一.模数转换器(ADC)是什么
    模数转换器即A/D转换器,或简称ADC(Analog-to-digitalconverter),通常是指一个将模拟信号转变为数字信号的电子元件
    主要用于将连续传输的模拟信号转换为数字信号,便于数字系统(如中央处理器CPU、微控制器MCU等)对传输信息进行快速处理和分析。
    模拟信号是时间和幅值均连续变化的信号,数字信号的幅值是离散的。
    模拟信号主要用于语音、音乐、温度等自然现象的传输,数字信号通常只包括“开”和“关”两种离散的状态。

    截图202410050800182184.jpg

    注意事项:使用ADC功能时有Vref引脚的单片机干万不能悬空,必须接外部参考电压源或者VCC!!!

    ADC原理EXCLE表: ADC转化.xlsx (9.83 KB, 下载次数: 116)

二.STC32G单片机ADC使用原理
    截图202410050804092898.jpg

    左对齐或者右对齐,由于寄存器有8位但是ADC需要12位,所以需要两个寄存器来存储。
    截图202410050805087536.jpg

    ADC时序控制器(ADCTIM)
    截图202410050807106316.jpg     截图202410050807269621.jpg

    ADC速度计算公式
    截图202410050808086418.jpg
   没有参考电压源的就以VCC作为基准电压

    截图202410050810238332.jpg     截图202410050811539904.jpg

    由于VCC外部接电路可能导致电压不稳定,所以在高精度ADC中接入一个基准电压源,且该引脚需<=2.5V

三.编写最简单的ADC采集代码(查询&中断)

        // 函数名称: ADC_Init
        // 函数功能: ADC初始化,查询写法

        void ADC_Init( void )
        {
    P1M0 = 0x00; //设置P10为高阻输入
            P1M1 = 0x01;

            ADCTIM = 0X3F;                                       
            ADCCFG = 0X2F;                                        //数据右对齐,时钟选择位SYSCLK/2/16最慢
            ADC_POWER = 1;                                        //打开adc电源
        }
//======================================================================================================
        // 函数名称: ADC_Read
        // 函数功能: 读取指定通道的adc电压

        u16  ADC_Read( u8 no )
        {
            u16 adcval;                                                        //adc数值保存变量
            ADC_CONTR &= 0xf0;                                                //清空通道
            ADC_CONTR |= no;                                                //选择通道
            ADC_START = 1;                                                //开启ADC转化
            _nop_();                                                        //空操作指令
            _nop_();                        
            while(!ADC_FLAG);                                                //等待ADC转换结束
            ADC_FLAG = 0;               
            adcval = (ADC_RES << 8)  + ADC_RESL;                        //计算adc的数值
            adc_val = adcval;
            return adcval;
        }

//======================================================================================================

        // 函数名称: ADC_Init
        // 函数功能: 中断的adc初始化,中断写法

        void ADC_Init( void )
        {
            P1M0 = 0x00;                                         //设置P10为高阻输入
            P1M1 = 0x01;

            ADCTIM = 0X3F;                                       
            ADCCFG = 0X2F;                                        //数据右对齐,时钟选择位SYSCLK/2/16最慢
            ADC_POWER = 1;                                        //打开adc电源
            EADC = 1;                                                //打开中断
            ADC_START = 1;                                        //开启ADC转化
        }

        void ADC_iSR() interrupt 5
        {
            ADC_FLAG = 0;                                        //清空读取标志位
            adc_val = (ADC_RES << 8)  + ADC_RESL;                //读取adc的数值
            ADC_START = 1;                                        //开启ADC转化
        }

//======================================================================================================
        // 函数名称: ADC_CAL_Voltage
        // 函数功能: 将adc数值换算成电源电压
        u16 ADC_CAL_Voltage(u16 num)
        {
            return num*2.5*1000 /4096;
        }

    ADC文件: ADC.zip (1.54 KB, 下载次数: 104)

四.总结:
    1.了解ADC的位数、引脚、基准电压、等关键名词。
    2.学会ADC的原理,学会用法和电源的换算公式。

五.课后练习
    简易电压表:
        1.用前4位数码管显示ADC的数值
        2.用后四位数码管显示最终电压。
        3.电压大于2.2V,蜂鸣长响,表示快要到达上限


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-10-5 11:38:47 | 显示全部楼层
惦*** 发表于 2024-9-13 17:28
第四集:1.点亮第一颗LED灯😁

概念引入:输出电压=VCC就是高电平,输出电压=GND(一般是0V)就是低电平,分别 ...

学习的很认真
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-05-08 11:47:57

6

主题

220

回帖

368

积分

中级会员

积分
368
发表于 2024-10-5 12:11:51 | 显示全部楼层
跟着大佬学习很有收获!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-9 09:39 , Processed in 0.172308 second(s), 89 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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