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

接下来我在这个帖子里准备发对冲哥视频做的笔记

[复制链接]

该用户从未签到

555

主题

9662

回帖

1万

积分

管理员

积分
14157
发表于 2022-12-20 22:18:09 | 显示全部楼层
感谢对本视频的 持续关注和爱护,还抽空做了部分观摩笔记,是对本视频的高度爱护
https://www.stcaimcu.com/forum.p ... p;extra=&page=7
  • TA的每日心情
    开心
    2024-2-28 07:06
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    5

    主题

    52

    回帖

    1334

    积分

    金牌会员

    积分
    1334
     楼主| 发表于 2022-12-20 23:38:32 | 显示全部楼层
    今天学习的第三个视频,以下为简略版笔记
    若有错误,请各位勘误::lol
    第三集:开发环境搭建和程序下载
    原先下载:串口下载,USB-TTL电路
    现在下载:硬件下载:UCAP接104电容
    p3.0/p3.1接上dp/dm
    p3.2 接上10k上拉电阻和300欧对地电阻
    main.c 开头:功能阐述等

    以下部分为STC的HID下载方式,一同写至下方。
    现在STC的带硬件USB的MCU支持用自带的硬件USB下载用户程序,因为走的是USB-HID通信协议,不需要安装任何驱动。
    ISP下载步骤:
    1、D-/P3.0, D+/P3.1 与PC-USB端口连接好
    2、将P3.2与GND短接,实验箱板子上的P3.2/INT0按键按下
    3、给目标芯片重新上电。若目标芯片已经停电,直接上电即可;若目标芯片处于通电状态,则需给目标
    芯片停电再上电(冷启动)。等待STC-ISP下载软件中自动识别出“STC USB Writer (HID1)”识别出来后,就与P3.2状态无关了(此时就不需要一直按着 P3.2 口了,一直按着把手累坏了不要紧,将按键按坏就麻烦了)。
    4、点击下载软件中的“下载/编程”按钮(注意: USB下载与串口下载的操作顺序不同,千万千万不要先点下载按钮,一定到等到电脑端识别出“STC USB Writer (HID1)”设备后,才能点下载按钮开始下载)
    当用户使用硬件USB对STC32G12K128系列进行ISP下载时不能调节内部IRC的频率,但用户可以选择芯片出厂时内部预置的16个频率(分别是5.5296M、6M、11.0592M、12M、18.432M、20M、22.1184M、24M、27M、 30M、33.1776M、 35M、36.864M、 40M、44.2368M 和48M,不同的系列可能不一样,具体以下载软件的频率列表为准)。下载时用户只能从频率下拉列表中进行选择其中之一,而不能手动输入其他频率。( 使用串口下载则可用输入4M~48M之间的任意频率)。

    今天的第三个笔记,第四集笔记还需整理。
  • TA的每日心情
    开心
    2024-2-28 07:06
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    5

    主题

    52

    回帖

    1334

    积分

    金牌会员

    积分
    1334
     楼主| 发表于 2022-12-20 23:50:56 | 显示全部楼层
    本帖最后由 千年老姚 于 2023-1-3 17:23 编辑

    今天学习的第四和第五个视频,以下为简略版笔记
    若有错误,请各位勘误::$
    第四章:建立工程点亮第一颗LED
    1.led点亮原理
    原来:什么都没接,两边电势相同=GND=0v,不会亮灯
    之后:一边接上+5V,另一边GND,电势差存在,亮灯。
    概念引入:输出电压=VCC=高电平;输出电压=GND(一般为0v)就是低电平,分别用1和0标识,此为理想值。
    概念引入:P2.3为一个IO口,GPIO(general purpose input output):通用输入输出端口简称,可用软件控制。
    (字幕input拼写有误)
    例:P5.0——一个GPIO口;
    P0——一组GPIO口;P0.0——一组的其中一个IO口;(批量操作和单个操作的概念)
    如何点亮P6.0?
    首先先给P4.0一个低电平,可以使得电流通过(三极管做开关功能)
    然后给P6.0低电平,可以点亮该LED
    2.新建工程——跟随STC32G12K128说明书新建
    1)打开keli,选择project新建,桌面新建文件夹保存工程。
    2)选择stc mcu,选择stc32g12k128,关闭提示窗。
    3)新建里面插入源代码。选择file→save,保存文件名.c(.c建议小写)
    4)右键,add existing...,可以看到代码在目录里面。
    代码部分:
    1. sfr P0 = 0x80;
    2. sfr P0M1 = 0X93;
    3. sfr P0M0 = 0X94;
    4. void main()
    5. {
    6.         P0M0=0X00;
    7.         P0M1=0X00;
    8.         while(1)
    9.         {
    10.                 P0++;
    11.         }
    12. }  //此程序不会使实验箱亮灯
    复制代码

    设置部分:设置编码GB2312,按tab后缩进四格;在output文件下设置create hex文件
    打开下载软件,芯片型号选择STC32G12K128
    按下P3.2,按下off,识别到芯片,打开object文件夹中的hex文件下载
    时间选择24mhz
    学会使用Ctrl+F搜索手册
    3.点亮第一个led
    代码部分:
    1. sfr P0 = 0x80;
    2. sfr P0M1 = 0X93;
    3. sfr P0M0 = 0X94; //P0端口操作完成
    4. sfr P4 = 0XC0;
    5. sfr P4M1 = 0XB3;
    6. sfr P4M0 = 0XB4;//P4端口操作完成
    7. sfr P6 = 0XE8;
    8. sfr P6M1 = 0XCB;
    9. sfr P6M0 = 0XCC;//P6端口操作完成
    10. sbit P40 = P4^0; //三极管控制引脚
    11. sbit P60 = P6^0;//led控制引脚
    12. void main()
    13. {
    14.         P0M0=0X00;
    15.         P0M1=0X00;//配置P0为准双向口
    16.          P4M0=0X00;
    17.         P4M1=0X00;//配置P4为准双向口
    18.         P6M0=0X00;
    19.         P6M1=0X00;//配置P6为准双向口
    20.         while(1)      //死循环
    21.        {
    22.                 //P0++;
    23.                 P40 = 0;//三极管引脚输出电平
    24.                 P60 = 0;//LED4引脚输出低电平
    25.        }
    26. }
    复制代码

    1).思考为什么不会亮? 引脚不对
    2).如何控制一个引脚? sbit P00 = P0^0 //选择P0.0作为引脚
    3).sfr——特殊功能寄存器 类似 #define P0 0X.......
    4).void main()先执行,while(1)死循环
    5).要学会能够自己查问题,从软件查到硬件
    6).注释多行:/* */    注释单行://
    7).学会搜索:Ctrl+F
    8).include定义在文件夹里写法:(不引入文件夹的后面补充)
    #include"COMM/stc.h"
    4.实现自动下载工程(USB_HID不停电下载)
    在stc_isp下面勾选当目标文件变化自动装载并发送下载命令

    冲哥总结:
    1.了解新工程的一个基本流程
    2.了解IO口的高低电平的含义
    3.务必牢记端口的几个寄存器 PxM0,PxM1,Px
    4.务必牢记 sbit 的 作用,牢记#include的作用
    5.了解USB_CDC不停电下载的用法和USB_HID不停电下载




    个人评价:本集很好的将LED点亮的原理讲的清楚。但是缺点也较为突出。
    上下集之间衔接太突兀,我个人在网站上看过其他MCU的课,能看得出来中间冲哥加了许多内容,诸如中断等等。
    对于我个人来讲确实是不会有着太大的影响,但是对于初学者来讲,4的上下集这样的衔接确实是对初学者学到第四集下集部分的效率大打折扣,望冲哥注意:handshake

    点评

    讲第四集下,是否讲几句安慰初学者的话,后面会再讲的 ? 还有能否重新 创作下第四集下 ? 我估计是这个意思  发表于 2022-12-21 10:48
    我昨天看了第七集,按钮,讲的很详细很形象,冲哥的讲课方式我觉得比较合适我,大学老师是复位 晶振、定时器、中断、串口等等 按模块搬出来,特别是111条指令,学生一看就头大,比如我,冲哥没有这样,我觉得挺好  详情 回复 发表于 2022-12-21 08:23
  • TA的每日心情
    开心
    2024-2-28 07:06
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    5

    主题

    52

    回帖

    1334

    积分

    金牌会员

    积分
    1334
     楼主| 发表于 2022-12-20 23:53:16 | 显示全部楼层
    顺便补一个图:实验箱上的LED灯电路图
    图片1.png
  • TA的每日心情
    擦汗
    昨天 14:47
  • 签到天数: 97 天

    [LV.6]常住居民II

    70

    主题

    622

    回帖

    1914

    积分

    超级版主

    积分
    1914
    QQ
    发表于 2022-12-21 08:23:39 | 显示全部楼层
    千年老姚 发表于 2022-12-20 23:50
    今天学习的第四和第五个视频,以下为简略版笔记
    若有错误,请各位勘误:
    1.led点亮原理

    我昨天看了第七集,按钮,讲的很详细很形象,冲哥的讲课方式我觉得比较合适我,大学老师是复位 晶振、定时器、中断、串口等等 按模块搬出来,特别是111条指令,学生一看就头大,比如我,冲哥没有这样,我觉得挺好
    热线19952583534
    www.STCAI.com
  • TA的每日心情
    开心
    2024-2-28 07:06
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    5

    主题

    52

    回帖

    1334

    积分

    金牌会员

    积分
    1334
     楼主| 发表于 2022-12-21 09:47:56 | 显示全部楼层
    本帖最后由 千年老姚 于 2023-1-3 17:24 编辑

    第四集留下的作业:点亮实验箱上的LED阵列
    由于我没有实验箱 那就稍微写一下代码大概的思路吧:lol
    首先我们看到这个LED阵列是P6.0-P6.7,然后根据电路图,P4.0需要低电平,三极管才能打开。
    那么答案已经呼之欲出了——只需要P4.0 = 0、P6 = 0,那么LED阵列上的灯均可点亮。
    代码如下:(此处省略头文件已经访问速度等部分)
    1. sfr P0 = 0x80;
    2. sfr P0M1 = 0X93;
    3. sfr P0M0 = 0X94; //P0端口操作完成
    4. sfr P4 = 0XC0;
    5. sfr P4M1 = 0XB3;
    6. sfr P4M0 = 0XB4;//P4端口操作完成
    7. sfr P6 = 0XE8;
    8. sfr P6M1 = 0XCB;
    9. sfr P6M0 = 0XCC;//P6端口操作完成
    10. sbit P40 = P4^0; //三极管控制引脚
    11. sbit P60 = P6^0;//led控制引脚
    12. void main()
    13. {
    14.         P0M0=0X00;
    15.         P0M1=0X00;//配置P0为准双向口
    16.         P4M0=0X00;
    17.         P4M1=0X00;//配置P4为准双向口
    18.         P6M0=0X00;
    19.         P6M1=0X00;//配置P6为准双向口
    20.         while(1)      //死循环
    21.        {
    22.                 P6 = 0 ; //LED所有灯均为低电平
    23.                 P40 = 0;//三极管引脚输出电平
    24.                 /*笨办法LED4引脚输出低电平:P60=0 ; P61=0; ,.......
    25.                但是这样子前面需要sbit很多引脚,造成单片机资源浪费*/
    26.        }
    27. }
    复制代码


    总体代码如上 若有错误,请各位指正:lol

    点评

    没有的装备立即去 STC 的 装备库,免费+包邮 领取啊  发表于 2022-12-21 10:49

    该用户从未签到

    555

    主题

    9662

    回帖

    1万

    积分

    管理员

    积分
    14157
    发表于 2022-12-21 10:55:19 | 显示全部楼层
    3种核心板深圳国芯人工智能有限公司-核心功能实验板 (stcai.com)
    1.png

    2种实验箱应用方案-深圳国芯人工智能有限公司 (stcai.com)
    1.png

    还有超级强大的STC-USB Link1D


    STC-USB Link1D工具SWD仿真屠龙刀-STC32G12K128, 或SWD仿真STC32G8K64,
    同时STC-USB Link1D的第二组串口, 跟被仿真 MCU 的串口1/2/3/4串口通信

  • TA的每日心情
    开心
    2024-2-28 07:06
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    5

    主题

    52

    回帖

    1334

    积分

    金牌会员

    积分
    1334
     楼主| 发表于 2022-12-21 11:34:10 | 显示全部楼层
    本帖最后由 千年老姚 于 2023-1-3 17:24 编辑

    各位早上好!刚才看完了第六和第七集,以下为简略版笔记
    看看家里还缺不缺人手做饭 不缺的话我继续看:lol
    若笔记有误,请各位指正:lol
    第五集:C语言运算符和进制数入门上
    1.C语言printf函数的实现:
    主函数添加程序:
    1. if(DeviceState != DEVSTATE_CONFIGURED)
    2.       continue;
    3. if(bUsbOutReady)
    4. {
    5.         usb_OUT_done();
    6.         printf("Hello World!");//printf在此处添加
    7.         printf("当前温度:%.2f 当前湿度:%.2f",11.2,55.2);
    8.         printf("%c",53) // 输出hex下35,十进制为53,对应ASCII码后,文本模式下对应数字5
    9. }
    复制代码

    printf定义:后图补充
    USB-CDC自适应波特率串口 直接115200也没问题 生成需要一部分时间。
    在stc_isp中记得选择文本模式,一堆字符串为ASCII文本
    一个汉字对应两个字符,hex下,30这个数字为0x30,十进制对应为48,48对应ASCII码为数字0
    如何转换?打开计算器,程序员模式,点击hex输入16进制数字。
    若ASCII码显示85,则显示一个U
    2.数的进制
    16进制 80H FFH——c语言写法 0X80 0XFF
    16进制数:0 1 2 3 4 5 6 7 8 9 A B C D E F 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F....
    2进制数: 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111
    16进制数范围:0x00-0xff(两位16进制范围下)
    16和2转换:16进制一位代表二进制四位
    所以0x00——0000 0000    0xff——1111 1111
    0xff十进制数——128+64+32+16+8+4+2+1=255
    以二进制数举例:1111 1011
    2转10——128+64+32+16+8+0+2+1=251
    10转16——251/16=15....11(余数)
    所以251=0xfb
    P4端口:P4^7 P4^6 P4^5 P4^4 P4^3 P4^2 P4^1 P4^0
    P6端口:P6^7 P6^6 P6^5 P6^4 P6^3 P6^2 P6^1 P6^0
    P6=0X00 若只点P6^4 和P6^0 则为 1110 1110——0XEE——十进制238—— P6=0XEE(写P6=238也可以)
    3.C语言常用运算符
    1.         printf("%u",15*3) //输出45
    2.         printf(“%u,%u”,100/99,100%99); //输出1 1
    3.         printf("%u \r\n",1<<1) //左移一位,输出2  
    4.         printf("%u \r\n",0x11&0x10) //与运算,输出16
    5.         printf("%u \r\n",0x11 | 0x10) //或运算,输出17
    6.         printf("%u \r\n",~0x11) //取反运算,输出65518
    7.         printf("%u \r\n",1<<2) //左移两位,输出4
    8.         printf("%u \r\n",1<<3) //左移三位,输出8
    复制代码


    1写成2进制:01 向左移位1位 变成10 10进制下10为2
    0x11——0001 0001
    0x10——0001 0000
    与运算:转为2进制后,每一位进行比较 全1出1,否则出0
    那么0x11和0x10的与运算结果为0001 0000 为0x10=16
    或运算:转为2进制后,每一位进行比较,有1出1,否则出0
    那么0x11和0x10的或运算结果为 0001 0001 为0x11=17
    取反运算:转为2进制后,0变成1,1变成0
    因为int型是16位数字
    那么0x11——0000 0000 0001 0001
    取反后——1111 1111 1110 1110——0xFFEE——65518
    0001左移两位——0100——4;0001左移三位——1000——8
    赋值运算 后期说明
    4.数据的基本类型
    bit——0/1
    char——-128到127
    unsigned char——0-255
    short int——-32768-32767
    unsigned int——0-65535

    课后练习:练习printf用法
  • TA的每日心情
    开心
    2024-2-28 07:06
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    5

    主题

    52

    回帖

    1334

    积分

    金牌会员

    积分
    1334
     楼主| 发表于 2022-12-21 11:37:40 | 显示全部楼层
    冲哥视频中涉及到的图片如下

    各种型的取值范围

    各种型的取值范围

    printf函数的实现

    printf函数的实现

    同上

    同上

    同上

    同上

    ACCII字符对应表

    ACCII字符对应表
  • TA的每日心情
    开心
    2024-2-28 07:06
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    5

    主题

    52

    回帖

    1334

    积分

    金牌会员

    积分
    1334
     楼主| 发表于 2022-12-22 09:41:57 | 显示全部楼层
    本帖最后由 千年老姚 于 2023-1-3 17:26 编辑

    各位冬至好!刚才看完了第八和第九集,以下为简略版笔记
    若笔记有误,请各位指正:lol
    第六集:LED闪烁和花式点灯
    一.基于Delay函数实现的led灯闪烁
    1.例子:闹钟中间的两个点闪烁——一亮一灭的过程为闪烁。
    1s= 1000ms =1000 000μs
    工程中添加以下语句:
    1. #define MAIN_Fosc 24000000UL  //定义一个IRC主时钟
    2. void delay_ms(u16 ms)   //unsigned int
    3. {
    4. u16 i ;
    5. do
    6. {
    7. i=MAIN_Fosc/6000;
    8. while(--i);
    9. }
    10. while(--ms);
    11. }
    复制代码

    u16变量定义:typedef unsigned int u16
    点亮灯部分函数(省略开头定义文件)
    1. void main()
    2. {
    3. while(1)
    4. {
    5. P40 = 0 ;         //三极管低导通
    6. P60 = 0 ;   //led4引脚低电平
    7. P67 = 0 ;
    8. delay_ms(500) ;
    9. P60 = 1 ;
    10. P67 = 1 ;
    11. delay_ms(500);
    12. }
    13. }
    复制代码

    语法分析:
    1.while
    {
    条件A
    }        
    判断方式:条件A是否为真?真执行代码,否则跳出
    2.do
    {
    功能B
    }while();
    判断方式:先执行一次功能B,再判断是否为真,真继续执行,否则跳出
    注意:单片机定义变量的时候在void main()为局部定义,在外面为全局定义
    举例:
    1. int a =10;
    2. do
    3. {
    4. printf ("a的值:%d\n",a);
    5. a=a+1;
    6. }while(a<20);
    7. while (a<20)
    8. {
    9. printf ("a的值:%d\n",a);
    10. a=a++;
    11. }
    12. //两个printf结果无区别
    复制代码

    3.--ms的用法
    1. printf ("a的值:%d\r\n",a);
    2. printf ("a的值:%d\r\n",--a);//先自减,再输出a的值为9
    3. printf ("a的值:%d\r\n",a);//print三个数为:10 9 9
    4. printf ("a的值:%d\r\n",a);
    5. printf ("a的值:%d\r\n",a--); //先输出a的值为10,再自减
    6. printf ("a的值:%d\r\n",a);//print三个数为:10 10 9
    复制代码


    4.#define 名称 需要定义的内容
    二.函数的应用
    在模块化编程里,函数使用分为如下三步:
    1.函数定义返回值 函数名称( 入口参数 )
    {
    函数要执行的功能
    }
    @返回值:没有返回值就是void
    @函数名称:避开关键词(使用不带颜色的),不重复,非特殊字符随便取
    @入口参数:类型+名称,多个参数“,”分开,空就写void
    2.函数声明返回值 函数名称( 入口参数 );
    3.函数调用 函数名称( 入口参数 );
    例:
    1. int Add ( int parm1 , int parm2)
    2. {
    3. return parm1 + parm2;
    4. }
    5. //一般函数定义写在后面,函数名字写在前面,需要的地方复制调用
    6. printf("计算结果为:%d\r\n",Add(1,2));//输出结果为3
    复制代码

    三.新建文件,使用模块化编程
    新建xxx.c和xxx.h文件,代表一个功能块。xxx.h格式:
    #ifndef __XXX_H  //if no define 如果没有定义
    #define __XXX_H
    调用头文件函数声明...
    #endif
    xxx.c格式:
    #include “xxx.h”
    函数定义添加文件一定要记得引用路径和添加到工程里。
    引用路径配置:魔术棒——C251——include path——点击文件夹

    在.c文件中写好函数之后,记得要在.h文件中写入函数名

    课后练习:SOS求救灯光编写三短三长三短(. . . _ _ _ . . .)
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

    GMT+8, 2024-5-30 11:23 , Processed in 0.097328 second(s), 68 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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