找回密码
 立即注册
查看: 276|回复: 24

跟冲哥学习STC32G128K芯片打卡

[复制链接]
  • TA的每日心情
    开心
    12 小时前
  • 签到天数: 13 天

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
    发表于 2024-4-25 15:14:37 | 显示全部楼层 |阅读模式
    2024年4月25日学习STC32G128K芯片记录

    第一课  什么是单片机  个人理解一个完善的微机系统,包括CPU  运存  存储  多余的IO口为控制外设用。

    截图202404251503223194.jpg


    一般单片机外貌

    截图202404251500417379.jpg


    问一下AI 关于51单片机的特点,给的回答是
    51单片机是一类基于Intel 8051微处理器内核设计的单片机,以其为基础发展出了众多兼容产品,形成了广泛的51单片机家族。这类单片机具有以下显著特点:
    • 兼容性:
      • 指令系统兼容:所有51系列单片机遵循相同的指令集架构(ISA),即与Intel 8051微处理器指令集兼容。这意味着为一个51单片机编写的程序可以无需或仅需少量修改就能在其他兼容的51单片机上运行,极大地增强了代码的移植性。
    • 结构简单且易于学习:
      • 冯·诺依曼结构:51单片机采用冯·诺依曼体系结构,程序存储器和数据存储器共享同一地址空间,CPU通过同一总线访问。这种结构简单明了,对于初学者而言易于理解。
    • 丰富的外设资源:
      • I/O端口:通常提供多个双向输入/输出(I/O)端口,可以直接控制外部设备或读取传感器信号。
      • 定时/计数器:内置多个定时器/计数器,可用于实现延时、频率测量、脉冲计数、PWM生成等多种功能。(???需进一步了解,后续学习再了解)
      • 串行通信接口:具有全双工的串行通信单元(如UART),支持异步通信(如RS-232)和同步通信(如SPI、I²C),便于与其他设备进行数据交换。
      • 中断系统:配备完善的中断结构,支持多个中断源(如外部中断、定时器中断、串口中断等),并具有多级优先级,有利于实时响应外部事件。
    • 扩展性:
      • 并行总线扩展:通过并行总线可以连接外部存储器、扩展I/O口或其他外围设备,以满足更复杂应用的需求。
      • 串行总线扩展:支持如I²C、SPI等串行总线协议,便于连接低引脚数的外围设备。
    • 广泛的应用领域:
      • 教育:由于其结构简单、资源适中且教程资料丰富,51单片机常被用作高校电子工程、自动化等相关专业的单片机入门教学平台。
      • 工业控制:广泛应用于各类工业自动化设备,如电机控制、生产线监控、数据采集系统等。
      • 消费电子:在家电、玩具、智能仪器仪表等消费电子产品中充当控制核心。
      • 汽车电子:用于汽车配件如报警系统、胎压监测、车载娱乐设备等。
      • 通信设备:在简单通信设备、远程监控系统中实现数据处理和传输。
    • 低成本与低功耗:
      • 芯片尺寸小、价格低廉:得益于大规模集成电路技术的发展,51单片机芯片尺寸小、制造成本低,适用于大批量、低成本的嵌入式应用。
      • 低功耗型号:部分51单片机提供低功耗模式,适用于电池供电或对能耗敏感的场合。
    • 开发工具链成熟:
      • 广泛的开发工具支持:有多种集成开发环境(IDE)、编译器(如Keil C51、SDCC等)、调试器和仿真器可供选择,为开发人员提供了便捷的开发环境。

    综上所述,51单片机以其良好的兼容性、结构简单、丰富的外设、易于学习和扩展、广泛的应用领域、低成本低功耗以及成熟的开发工具链等特点,成为了嵌入式系统设计中的重要选择,尤其在教育和入门级项目中具有较高的普及度。随着技术的发展,尽管市场上出现了更多高性能的单片机产品,但51单片机因其独特的市场定位和用户群体,仍保持着一定的市场份额和活跃度。
    随后第一课很笼统,但可以扩展学习了解到,其原理还是很复杂的,先学技术再说。

    回复 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-25 15:40:53 | 显示全部楼层
    第二课  外设
    1. 数码管:每个管为1个灯,共8个灯
    2. NTC测温:连续测温,模拟测温
    3. 18B20: 不可连续测温,单个点,数字测温
    4. ADC按键:采集模拟电压,判断数值,根据基准电压,0-4095  线性变化    A是模拟 D是数字
    5. PWM模拟DAC
    6. 24C02 存储芯片
    7. LCD接口屏幕
    8. 蜂鸣是喇叭
    学习的STC32G128K工作电压1.9-5.5V
    课后作业思考:MP3应该是个不错的实践项目
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-25 16:15:16 | 显示全部楼层
    第三课  环境搭建

    所需软件
    1. STC-ISP
    截图202404251547234345.jpg

    2. STC32手册
    可找到示例程序,即IO控制方法,通过搜索,快速定位自己想要的位置。得多熟悉熟悉其原理
    3. C251开发环境
    安装Keil就可以。
    4. 下载程序   先按住INT0 P3.2 打开开关上电  可以识别为HID1模式,选择24M时钟,点击下载就可以直接下载
    可自动识别单片机是否正确
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-25 17:39:24 | 显示全部楼层
    第四课 新建工程并点亮LED灯

    上节课未吃透所遇问题
    打开工程后出现报错
    截图202404251654573741.jpg

    重新调整后发现,需要在STCAi-ISP软件中添加Keil的型号和头文件  具体流程为 Keil仿真设置---->添加型号和头文件到Keil中.... 看下图
    截图202404251657005221.jpg

    1. LED点亮原理
    LED灯两端的高低点评会点亮灯,板载资源中首先要通过P40输出低电平打开总开关,再通过P60输出低电平就可以点亮LED灯。
    2. 代码编写
    sfr  特殊功能寄存器  0x80~0xFF   sbit????  
    P4M0      P4M1
    0                0    准双向口
    0                1    推挽输出
    .......
    定义寄存器

    sfr         P4          =           0xc0;
    sbit        P40         =           P4^0;

    设置输出模式 准双向口
    P4M1 = 0x00;   P4M0 = 0x00;

    操作端口高低点评,点亮LED灯
    打开总开关
    P40 = 0;
    亮LED灯
    P60 = 0;
    3. 程序下载的USB模式  
    向IAP_CONTR寄存器发送0x60  可实现不停电进行ISP下载

    USB-HID
    需要包含关于usb的lib文件
    截图202404251731233143.jpg

    相关代码

    char *USER_DEVICEDESC = NULL;
    char *USER_PRODUCTDESC = NULL;
    char *USER_STCISPCMD = "@STCISP#";                      //设置自动复位到ISP区的用户接口命令

    void sys_init()
    {
        WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
        EAXFR = 1; //扩展寄存器(XFR)访问使能
        CKCON = 0; //提高访问XRAM速度

        //====== USB 初始化 ======
        P3M0 &= ~0x03;
        P3M1 |= 0x03;
       
        IRC48MCR = 0x80;
        while (!(IRC48MCR & 0x01));
       
        USBCLK = 0x00;   // USB-CDC相关 HID需要禁用
        USBCON = 0x90;  // USB-CDC相关  HID需要禁用
        //========================
    }

    最后主函数中调用

        sys_init();  //系统初始化
        usb_init();  //USB CDC 接口配置
        EA = 1;     // 打开总中断

    开启USB的下载功能
    此外可以通过Include 加载头文件,就不需要使用sfr定义了。
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-25 18:25:31 | 显示全部楼层
    第四课  C语言入门   已经掌握相关编程语言  再次复习一下

    1. printf的格式化输出,串口通讯,万能的 print debug。
    示例代码
    printf("当前温度:%0.2f\r\n", 25)
    其中的%后可跟数字有以下几个关键字符
    示例中f表示单精度浮点输出
    截图202404251811487370.jpg

    x.y 表示整数有x位,小数有y位有效数字,其他可用描述为
    截图202404251815062409.jpg


    此外\r \n 为转义字符表示换行和回车。冲哥更加详细的描述了其不同系统中的应用

    Windows系统中我们输入回车时,输入的字符是\r\n
    unix系统中回车为\n,
    mac系统中回车的字符为\r.

    2. 此外根据ASCⅡ可以说明串口中16进制与字符之间的关系
    截图202404251819434556.jpg

    3. 使用程序员计算器可以不费脑子的计算各个进制之间的对应关系
    截图202404251820506391.jpg


    4. 单片机编程中可以使用常规算数运算符 + - * /  取余%  此外支持C中的++ 和 -- 自增自减运算符
    以往C语言中对于位运算使用较少
    在单片机中使用位运算应该效率更高

    右移(>>)左移(<<)
    按位与(&)
    按位或(|)
    按位异或(^)
    取反(~)

    5. 数据类型
       截图202404251824158783.jpg
    与传统C不同的是出现了sfr关键字 特殊寄存器
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-25 21:44:11 | 显示全部楼层
    本帖最后由 Rain_Personal 于 2024-4-25 21:56 编辑

    第六课  LED闪烁及花式点灯

    1. 灯闪烁的原理是,通过延时函数,不断的开关LED灯,进而达到闪烁效果
    截图202404252127331755.jpg

    2. 相关延时函数的代码为
    #define MAIN_Fosc        24000000UL  // 系统的晶振频率


    void  delay_ms(u16 ms)     // 延时多少ms
    {
         u16 i;
         do{
              i = MAIN_Fosc / 6000;    //  6000是怎么确定的?都适用么?
              while(--i);
         }while(--ms);
    }
    #define X Y  关键字可以将Y映射到X 即X就是Y;示例中MAIN_Fosc  就是24000000UL。

    不断的开关就需要循环结构,冲哥讲的是do{}  while();和while{}
    此外延伸出 自减符--的应用。

    3. 模块化编程 C语言的语法

    具体定义方法为:
    ////////////////////////////////

    返回值 函数名称( 入口参数 )
    {
    函数要执行的功能
    }
    ///////////////////////////////
    其中
    @返回值:没有返回值就是void
    @函数名称:避开关键词,不重复,非特殊字符随便取
    @入口参数:类型+名称,多个参数“,”分开,空就写void

    函数的声明方法
    ///////////////////////////////

    返回值 函数名称( 入口参数 );

    ///////////////////////////////


    函数调用

    ///////////////////////////////

    有返回值的
    值 =  函数名称( 入口参数 );

    无返回值
    函数名称( 入口参数 );

    ///////////////////////////////


    C语言中一般将模块写为h和c文件,
    其中h为头文件,主要是函数的声明
    其格式为

    #ifndef __XXX_H
    #define __XXX_H
    调用头文件
    函数声明...
    #endif


    c为模块主体,是各个函数的实现方法
    其格式为

    #include “xxx.h”
    函数定义


    使用模块时,只要引入头文件就可以使用相关模块
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情

    15 小时前
  • 签到天数: 63 天

    [LV.6]常住居民II

    3

    主题

    562

    回帖

    780

    积分

    高级会员

    积分
    780
    发表于 2024-4-25 22:47:44 | 显示全部楼层
    Rain_Personal 发表于 2024-4-25 21:44
    第六课  LED闪烁及花式点灯

    1. 灯闪烁的原理是,通过延时函数,不断的开关LED灯,进而达到闪烁效果

    6000时根据单片机来确定的stc8不一样
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-26 08:14:58 | 显示全部楼层
    soma 发表于 2024-4-25 22:47
    6000时根据单片机来确定的stc8不一样

    感谢答疑解惑,是不是跟指令集什么的有关呢?
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-26 18:14:22 | 显示全部楼层
    第七课 按键点灯

    1. 按键原理
    按键存在常开开关和常闭开关。
    截图202404261758577106.jpg
    例如SW17按键按下后,会把R10电阻的右侧电压拉低到GND,此时R82两端电压应该位VCC。
    此外按键按下后会出现抖动情况。
    截图202404261800359659.jpg

    出现抖动的原因为机械触电的弹性抖动,一个开关会在短时内出现电压不稳导致的,类似于接触不良,出现电阻变化。

    2. 按键代码的实现过程

    首先需要通过宏定义 定义KEY
    #define KEY P32 //P32应该属于寄存器,相当于KEY就是寄存器的
    1. if( KEY == 0 )       // 第一次判断
    2. {
    3.     Delay_ms(10);  //  可能会有抖动  跳过抖动部分 10ms是随意数值?可否增加或者减少
    4.     if( KEY == 0 )  //   再次判断
    5.     {
    6.     执行功能
    7.     }
    8. }
    复制代码
    3. 16位二进制,可以通过移位方法将某个端口变为0,点亮LED灯,通过按键将P6移位可以实现按键流水灯。

    4. 数组的使用
    将移位的数值直接存储值数组,通过索引为P6赋值,PS比较占用内存,不如移位好
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.3]偶尔看看II

    1

    主题

    37

    回帖

    139

    积分

    注册会员

    积分
    139
     楼主| 发表于 2024-4-26 18:34:12 | 显示全部楼层
    本帖最后由 Rain_Personal 于 2024-4-26 20:06 编辑

    第八课  蜂鸣器的应用

    1. 蜂鸣器分类
    有源蜂鸣器  自带震荡源,通电就会叫,比无源蜂鸣器会贵点
    无源蜂鸣器  无震荡源,通直流信号,不会叫
    2. 控制原理  
    截图202404261819081271.jpg

    P54引脚
    P54=!P54
    3. 蜂鸣器的应用
    通过全局变量区分开关模式还是运行模式
    灯是低电平点亮,可通过取反~采用将1移位,修改亮灯状态
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-7 21:40 , Processed in 0.073400 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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