找回密码
 立即注册
查看: 1342|回复: 20

【实验箱已送】STC32学习打卡

[复制链接]

该用户从未签到

1

主题

17

回帖

65

积分

注册会员

积分
65
发表于 2023-8-9 08:42:50 | 显示全部楼层 |阅读模式
本帖最后由 STCAI-32位8051 于 2023-8-16 11:22 编辑

2023/8/9 开始打卡冲哥STC32系列视频
今年智能车负压电磁组选用的芯片就是stc32g12k128这款32位MCU,
算是已经初步接触到了这款芯片,但仍处于刚刚了解的阶段,于是希望在视频学习中再深入了解下
顺带,顺带带走STC32G12K128-实验箱-V9.6
回复 送花

使用道具 举报

  • TA的每日心情
    奋斗
    2023-12-13 11:59
  • 签到天数: 1 天

    [LV.1]初来乍到

    3

    主题

    337

    回帖

    1649

    积分

    版主

    积分
    1649
    发表于 2023-8-9 08:52:49 | 显示全部楼层
    欢迎楼主继续打卡学习,分享学习感受
    优秀的打卡贴会优先获赠实验箱包邮
    1.png

    QQ:2269694595     微信:18106296594
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-9 22:45:43 | 显示全部楼层
    【第一集】心得体会
    主要内容:初步认识单片机,了解单片机的一些功能及应用;并解答了一些初学者的常见问题,给出一些学习建议
    在本集视频中了解到单片机的定义及基本组成:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。
    并了解到单片机几种常见的封装:PCIP、QFN、LQFP等

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-10 08:30:55 | 显示全部楼层
    【第二集】心得体会
    主要内容:介绍STC32实验箱-v9.4的硬件外设,并拓展了一些外设的原理、功能及实际应用,最后简要浏览了小STC32的片上资源




    【1】红外发射模块

    【2】红外接收 - 红外遥控

    【3】电压比较器 - 可以作为一种触发条件,以一个参考电压为基准,输入的电平信号大于它触发/小于它触发
    【4】数码管 - 可以显示数字/字母
    【5】万能板 - 拓展用,拓展一些芯片,和中间单片机引出的引脚飞线使用。
    【6】NTC - 测量温度 (模拟),输出连续的电压信号,需要使用ADC进行模数转换
    【7】18B20 - 测量温度  (数字),测量准确但无法连续采值,且速度比NTC要慢
    【8】ADC按键 - 1个I/O口(有ADC功能)即可读取多个按键,节省IO,按键较多IO口较少时可以采用这一方案
    【9】基准电压 - 可能是个可调的稳压,给上面的ADC按键提供参考电压
    【10】PWM 模拟DAC  -数模转换,生成波形,输出特定电平等
    【11】24C02 - 2Kbit的串行EEPROM存储芯片,可以实现掉电存储
    【12】矩阵键盘 - 只需要将每行每列接入IO,即可读取对应键值,节省IO资源
    【13】独立按键 - 1个I/O读取1个按键
    【14】lcd接口 - LCD12864的接口,STC有个软件可以模拟LCD12864(手边没有LCD,可以暂时用软件模拟查看显示效果)
    【15】LED指示灯 -  指示开发板是否正常供电/运行
    【16】USB - 供电/烧录程序
    【17】RS232 - 经典接口,现在使用需要USB-232的转接线。
    【18】flash扩展 - 存放数据(容量较大)
    【19】调试接口 - 连接STC烧录/调试器
    【20】蜂鸣器 - 常用于发出提示音


    最后简单介绍了一下STC32的片上资源:串口、定时器、DMA等



    课后作业:【举出传感器实际应用的案例】
    NTC传感器:测量温度(恒温)
    红外接受发射模块:红外遥控(电视空调遥控器)



    批注 2023-08-09 225839.jpg
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-10 09:05:20 | 显示全部楼层
    【第三集】心得体会

    主要内容:1、STC-ISP软件的下载 2、STC32手册的下载 3、PDF阅读器的下载 4、搭建C251开发环境(keil) 5、配套例程下载 6、第一个工程的编译和下载


    【1】STC-ISP下载
    STC-ISP是STC家专用的烧录程序,不仅阔以烧录程序还集成了很多开发工具:虚拟显示功能、生成范例程序、驱动安装等
    可以直接从STC的网站下载:STC-ISP下载传送门:深圳国芯人工智能有限公司-工具软件 (stcai.com)
    【2】【3】STC32手册和PDF阅读器在之前就下载使用过了,就不详述了
    补充:这里冲哥提供了一个阅读手册的方法:一般手册都是成百上千页的文档,从头到尾翻找效率较低,所以可以借助PDF软件列出的大纲/目录,准确查找到文档中所需的部分
    【4】C251环境搭建
    下载C251版本的keil安装包,按照手册步骤安装,激活
    【5】程序包下载
    可以通过STC-ISP里的资料下载板块直接下载STC32配套例程
    【6】第一个工程的编译和下载
    步骤总结:预先安装stc32g12k128支持包,并从STC-ISP内的Keil仿真板块下载安装STC32的usb下载驱动
                    用keil打开例程后,在option for Target中选择单片机型号,并勾选编译输出Hex文件选项,点击build编译
                    连接试验箱并打开STC-ISP烧录软件,打开由keil编译生成的hex文件,调整芯片信号、串口、IRC频率后点击下载即可
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-10 10:01:47 | 显示全部楼层
    本帖最后由 ANop 于 2023-8-10 10:24 编辑

    【第四集】 心得体会
    主要内容:点亮LED灯



    原理

    GPIO可以通过软件读取其输入电平或控制其输出高低电平。
    将各部分按照顺序依次连接:GPIO-发光二极管-限流电阻-5v

    这是通过控制GPIO输出高低电平即可控制LED亮灭
    此种位共阳极开漏输出控制LED,还有一种是共阴极推挽输出控制LED(由于IO负载能力有限,建议使用第一种方式)


    程序编写
    1、新建Keil工程
    新建projects-Target目录下添加.c文件,点击options for target设置芯片型号,并在output板块中勾选输出hex文件这一选项
    2、编写程序
    **********************************************************
    #incude "stc.h"
    #include "usb.h"
    char *USER_DEVICEDESC = NULL;
    char *USER_PRODUCTDESC = NULL;
    char *USER_STCISPCMD = "@STCISP#";
    /*定义P0、P4、P6特殊功能寄存器*/
    sfr P0 = 0x80;   
    sfr P0M1 = 0x93;
    sfr P0M0 = 0x94;

    sfr P4 = 0x80;
    sfr P4M1 = 0x93;
    sfr P4M0 = 0x94;

    sfr P6 = 0x80;
    sfr P6M1 = 0x93;
    sfr P6M0 = 0x94;

    /*对单个IO口进行位定义*/
    sbit P40 = P4^0;
    sbit P60 = P6^0;

    void main()
    {
            /*通过配置PxM0、PxM1,设置GPIO功能模式等*/
            P0M0 = 0x00;
            P0M1 = 0x00; //0x00:将Px配置为准双向口
            
            P4M0 = 0x00;
            P4M1 = 0x00;
            
            P6M0 = 0x00;
            P6M1 = 0x00;

            usb_init();
            EA = 1;

            while(1)
            {
                    //将4.0、6.0口置0,点亮LED
                    P40 = 0;
                    P60 = 0;
            }      
    }

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

         P3M0=0x00;
         P3M1=0x00;

         P3M0 &=~0x03;
         P3M1 |=0x03;

        //设置USB使用的时钟源
        IRC48MCR = 0x80;    //使能内部48M高速IRC
        while (!(IRC48MCR & 0x01));  //等待时钟稳定
    }
    ************************************************************      



    4、编译生成hex文件使用STC-ISP烧录(USB-CDC/虚拟串口,不停电下载)
    新建3个变量char *USER_DEVICEDESC = NULL;
                      char *USER_PRODUCTDESC = NULL;
                      char *USER_STCISPCMD = "@STCISP#";
    并将char* USER_STCISPCMD 的值设为自定义的命令 默认为@STCISP#
    在main 函数中 添加usb_init() 初始化函数
    打开中断 EA=1;
    复制例程中的sys_init()函数到本工程中,并在main函数中调用。







    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-10 10:34:44 | 显示全部楼层
    【第五集】心得体会

    主要内容:详细讲解了数制、c语言中常用的运算符及数据类型,并演示了c语言中printf的实现
    一、printf的实现
    主函数中添加
    if(DeviceState !=DEVSTATE_CONFIGURED) //判断USB是否连接成功
    continue;
    if(bUsbOutReady)
    {
    usb_OUT_done(); //接收应答(固定格式)
    printf("室内温度:%.2f\r\n",11.2);
    }
    二、常见运算符
    算术运算符
    1、加(+)减(-)乘(*)除(/)
    2、模(余)运算符(%):不允许出现浮点型,余数正负取决于被除数正负
    3、自增(++i,--i;i++,i--)

    位运算符
    1、右移(>>)、左移(<<)最低为补0
    2、按位与(&)
    3、按位或(|)
    4、按位异或(^)
    5、取反(~)


    赋值运算符
    1、+= 加赋值(a+=3 等价于 a=a+3)
    2、-= 减赋值
    3、*= 乘赋值
    4、/= 除赋值
    5、%= 求余赋值
    6、&= 按位与赋值
    7、|= 按位或赋值
    8、^=按位异或赋值
    9、<<=左移位赋值(>>=右移位赋值)


    三、基本的数据类型
    批注 2023-08-10 103417.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-10 10:47:24 | 显示全部楼层
    【第六集】心得体会
    主要内容:花式点亮LED灯,在程序编写过程中,学会使用函数,并形成模块编程的思维,提高程序的可读性和可维护性


    一、LED闪烁
    #include "com/stc.h"
    #include "usb.h"


    sfr P0 = 0x80;   
    sfr P0M1 = 0x93;
    sfr P0M0 = 0x94;

    sfr P4 = 0x80;
    sfr P4M1 = 0x93;
    sfr P4M0 = 0x94;

    sfr P6 = 0x80;
    sfr P6M1 = 0x93;
    sfr P6M0 = 0x94;

    /*对单个IO口进行位定义*/
    sbit P40 = P4^0;
    sbit P60 = P6^0;


    #define  MAIN_Fosc 24000000UL    //定义一个IRC系统时钟
    void delay_ms(u16 ms)  //u16 在stc.h中进行了定义
    {
      unsigned int i;
      do
      {
        i=MAIN_Fosc/6000; //计算出1ms需要循环段次数
        while(--i);
      } while(--ms);
    }


    void main()
    {
            /*通过配置PxM0、PxM1,设置GPIO功能模式等*/
            P0M0 = 0x00;
            P0M1 = 0x00; //0x00:将Px配置为准双向口

            P4M0 = 0x00;
            P4M1 = 0x00;

            P6M0 = 0x00;
            P6M1 = 0x00;


            while(1)
            {
                    //将4.0、6.0口置0,点亮LED
                    P40 = 0;
                    P60 = 0;
                    delay_ms(20);

                    P40 = 1;
                    P60 = 1;
                    delay_ms(20);


            }

    }
    第六集(下)
    二、函数的使用
    在模块化编程里,函数使用分为如下三步:
    1:函数定义
          返回值 函数名称(入口参数)
         {
               函数要执行的功能;
               return 返回值;(无返回值可不写)
          }
          @返回值:没有返回值就是 void
          @函数名称:避开关键词,不重复,非特殊字符随便取
          @入口参数:类型 + 名称,多个参数“,“分开,空就写 void
    2.函数声明
          返回值函数名称(入口参数);
    3.函数调用
          函数名称(入口参数):
    三、新建文件,使用模块化编程
    新建 xxx.c 和 xxx.h 文件,代表一个功能块。
    xxx.h 格式:
          #ifndef __XXX_H
          #define __XXX_H
          调用头文件
          函数声明...
          #endif
    xxx.c 格式
          #include"xxx.h"
          函数定义
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-10 17:36:57 | 显示全部楼层
    【第七集】心得体会

    主要内容:学习使用独立按键,并使用按键控制LED灯。

    在本节课中介绍了两种按键效果
    第一种:按下按键即执行

    if(KEY == 0)
    {
      Delay_ms(10);  
      if(KEY ==0)
      {
        执行功能
      }
    }
    第二种:按下按键松手后再执行
    if(KEY == 0)
    {
      Delay_ms(10);  
      if(KEY ==0)
      {
          while(KEY==0); //松手检测
          执行功能
       }
    }
    由于按键按下/弹起时存在机械抖动,高低电平跳变,可以在程序中添加短暂延时(delay_ms)进行软件消抖

    数组的使用:
    数组使用分为如下两步:
    1.声明及初始化
        类型名称[长度]={数值};<--直接定义,也阔以声明后再赋初值
        例如:
         usigned char x[3]={23,43,41};
    2.使用
        赋值:名称[索引]= 数值
        调用:名称[索引]
            索引从0开始



    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    1

    主题

    17

    回帖

    65

    积分

    注册会员

    积分
    65
     楼主| 发表于 2023-8-10 22:46:05 | 显示全部楼层
    【第八集】心得体会

    主要内容:认识蜂鸣器,了解控制方法及基本控制电路,并学习编写蜂鸣器控制程序




    1、认识蜂鸣器

    分为有源蜂鸣器和无源蜂鸣器,有源蜂鸣器内置震荡源,通电可直接发声,但无源蜂鸣器可通过程序控制音高


    2、控制原理/基本电路
    081627pksx5cw15vnozo5n.jpg

    控制P54印引脚,高电平蜂鸣器关闭,低电平蜂鸣器开启
    #define buzzer P54

                   if(key == 0)
                  {
                      delay_ms(10);
                      if(key == 0)
                       {
                            buzzer = !buzzer  //点击按键蜂鸣器开,再点关。                  
                            while(key == 0);                       
                        }
              }


    3、冲哥程序复现
    132553hwy175gggwxynfwt.jpg

    132553s0nckiztac99slna.jpg

    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-12 19:24 , Processed in 0.072066 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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