找回密码
 立即注册
楼主: Rain_P***

跟冲哥学习STC32G128K芯片打卡

[复制链接]
  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-4-27 18:02:20 | 显示全部楼层
    本帖最后由 Rain_Personal 于 2024-4-28 18:17 编辑

    第十七课  模数转换器ADC

    1. ADC原理
    截图202404271728136208.jpg

    个人理解有点像递归调用,
    截图202404271729251811.jpg


    使用ADC功能时,Vref引脚的单片机不能悬空,必须接外部参考电压源或者VCC!!! 是不是表明如果不接Vref就会烧毁单片机?


    截图202404271736259821.jpg


    实验箱的采用的是2.5V基准电压

    ADC接口需要设置为高阻输入  相当于初始化ADC

    P1M0 = 0x00;                                         //设置P10为高阻输入
    P1M1 = 0x01;


    ADCTIM = 0X3F;                                        //ADC内部时序
    ADCCFG = 0X2F;                                        //数据右对齐,时钟选择位SYSCLK/2/16最慢
    ADC_POWER = 1;                                        //打开adc电源



            u16  ADC_Read( u8 no )  // no 表示通道
            {
                    u16 adcval;                                                                //adc数值保存变量
                    ADC_CONTR &= 0xf0;                                                //清空通道
                    ADC_CONTR |= no;                                                //选择通道
                    ADC_START = 1;                                                        //开启ADC转化
                    _nop_();                                                                //空操作指令    intrins.h
                    _nop_();                        
                    while(!ADC_FLAG);                                                //等待ADC转换结束
                    ADC_FLAG = 0;               
                    adcval = (ADC_RES << 8)  + ADC_RESL;        //计算adc的数值  高8位 低8位用两个16进制描述12位的ADC值
                    adc_val = adcval;
                    return adcval;
            }

    通道的选择 其中ADC_CHS表示通道,函数调用需要输入对应参数 0000~0111即0~7
    截图202404271753134805.jpg

    实验箱中可以通过按键生成ADC值
    截图202404271759161300.jpg

    SW1~SW16

    获取真实电压值的计算方式为

    u16 ADC_CAL_Voltage(u16 num)
    {
            return num*2.5*1000 /4096; // num取值为0-4096    返回值为0-2500
    }



    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-4-28 18:49:07 | 显示全部楼层
    第十八课  ADC采集电源电压和ADC按键

    目的:检测电源电压
    CHIPID7  内部1.19V参考电压
    CHIPID8  内部1.19V参考电压


    截图202404281837254481.jpg

    ADC的第15通道会形成固定的1.19V,采集ADC时,会将1.19V转换为参考值  比如2048,此时可以根据这个反推Vref参考电压
    2048 = 1.19/Vref*4096  ===>  Vref = 1.19/0.5 = 2.38V

    ADC按键的原理是,读取ADC的值,判断ADC值,不同的按键会又不同的ADC值,进而判断那个键按下。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-4-28 20:45:37 | 显示全部楼层
    本帖最后由 Rain_Personal 于 2024-5-15 20:42 编辑

    第十九课 NTC温度采集

    1. NTC原理

    NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻。其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化。现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系NTC热敏电阻材料。
    检测电阻就可以获取当前温度
    截图202404282031193856.jpg

    横坐标温度,纵坐标电阻
    截图202404282035177292.jpg


    Vout可以根据ADC值测得
    那么NTC的电阻R2 = Vout*R1/(Vin-Vout)
    再根据R2~温度 反推出来温度。

    截图202405152041358665.jpg
    跳线帽链接红色圆圈中左边两个阵脚,就可以使用NTC测温了,通过手触摸蓝色NTC电阻,就可以改变温度数值,检测对错


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-4-29 19:36:27 | 显示全部楼层
    第二十课 串口通信

    1. 串口通信是将两个设备通过一定的协议进行信息交换。
    截图202404291916063055.jpg


    并行通信和串行通信:每次发送一位数据的称为串行通信,多位一起传输的称为并行通信。
    串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。

    接线方式:
    截图202404291918033227.jpg


    接受时钟和发送时钟不一定相同,只要相近就可以的属于异步通讯。接收时钟与发送进钟严格同步,通常要有同步时钟。
    全双工 半双工和单工的区别,根据用的几条线,单工是单向发送,只能发不能回。
    截图202404291921281425.jpg


    波特率 表明每秒钟可以发送的数据 例如9600波特率,表示每秒可以发送9600位数据。

    串口通讯的距离比较短,一般解决方法为添加专用芯片
    截图202404291926556327.jpg


    应用:通过串口转以太网,WIFI,蓝牙,zigbee等可以做成路由器,网络插座,智能手环等设备。

    2. STC32的串口引脚
    截图202404291929476990.jpg


    手册是需要熟练掌握的信息!


    实验箱中电路图:
    截图202404291931578370.jpg




    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-5-5 14:09:09 来自手机 | 显示全部楼层
    本帖最后由 Rain_Personal 于 2024-5-15 17:58 编辑

    哈哈哈,好事发生,给自己放个假
    准备回归工作生活,再琢磨琢磨串口通信问题。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-5-8 20:58:28 | 显示全部楼层
    Rain_Personal 发表于 2024-4-25 17:39
    第四课 新建工程并点亮LED灯

    上节课未吃透所遇问题

    有点难度,现在都没调试完,怎么自动上电下载程序
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    1 小时前
  • 签到天数: 227 天

    [LV.7]常住居民III

    16

    主题

    138

    回帖

    806

    积分

    高级会员

    积分
    806
    发表于 2024-5-9 22:42:51 | 显示全部楼层
    学习
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-5-15 21:18:17 | 显示全部楼层
    本帖最后由 Rain_Personal 于 2024-5-16 22:04 编辑

    第二十一课  串口应用
    串口2的启用方法


    void Usart2_Init(void)
    {
            P_SW2 = 0X80;
            P_SW2 |= 0X01;                        //将串口2 的引脚切换到P46 P47   0X00  P10 P11
           
            S2CFG = 0X01;
           
            S2CON = 0X50;
            T2L = BRT;
            T2H = BRT>>8;
            T2x12 = 1;
            T2R = 1;
           
            wptr = 0x00;
            rptr = 0x00;
            busy = 0;
    }
    截图202405162159153418.jpg

    void Usart_Isr() interrupt 8
    {
            if( S2TI )
            {
                    S2TI = 0;
                    busy = 0;
            }
            if( S2RI )
            {
                    S2RI = 0;
                    buffer[wptr++] = S2BUF;
                    wptr &= 0X0F;
            }
    }

    void Usart2_Send(char dat)
    {
            while(busy);
            busy = 1;
            S2BUF = dat;
    }

    void Usart2_SendStr(char *p)
    {
            while(*p)
            {
                    Usart2_Send(*p++);
            }
    }
    其中S2BUF 为寄存器地址,可以用于读取和写入
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-5-17 21:45:02 | 显示全部楼层
    第二十二课 CDC串口通信

    截图202405172122333715.jpg

    无需USB转TTL工具!P30和P31连接电脑D-和D+

    截图202405172123458876.jpg

    STC32G128K支持自动烧录

    具体方法之前探索过,流程如下

    1)下载.lib库和头文件
    2)新建工程,加载lib库文件
    3)调用头文件并初始化USB功能
    4)设置工程参数,编译选项等
    5)首次下载手动进入HID下载模式下载
    6)下载完成等待生成CDC串口号,设置ISP软件参数

    执行完如上步骤,再也不需要手动进下载模式了,只要ISP软件点一下下载程序就可以自动烧录。


    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:06
  • 签到天数: 151 天

    [LV.7]常住居民III

    1

    主题

    63

    回帖

    197

    积分

    注册会员

    积分
    197
     楼主| 发表于 2024-5-17 21:57:06 | 显示全部楼层
    第二十三课 看门狗

    复位的主要作用是把单片机内部的特殊功能寄存器置于初始状态,使单片机硬件、软件从一个确定的、唯一的起点开始工作。




    看门狗是一个计数器,它的基本功能是在软件问题和程序跑偏后重启系统。看门狗正常工作时会自动计数,程序进程会定时将其归零。如果系统在某个地方卡住了或者跑了,定时器就会溢出,是系统强制复位。
    检测bug和意外
    软件的可靠性一直是一个关键问题。任何使用软件的人都可能遇到电脑死机或程序失控的问题,这种问题在嵌入式系统中也存在。由于单片机抗干扰能力有限,在工业现场仪器仪表中,经常因电压不稳和电弧干扰而死机。在水表、电表无人值守的情况下,系统因干扰无法重启。为了保证系统在受到干扰后能自动恢复正常,看门狗定时器的使用是非常有价值的。

    提高单片机运行可靠性


    WDT_CONTR寄存器操作看门狗



    截图202405172155055263.jpg

    CLR_WDT = 1表示喂狗

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-11-1 07:31 , Processed in 0.078400 second(s), 71 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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