MAL'S_BLOG

Welcome to Malossov's Personal Archieve!

0%

C2000学习

基于TI官方板卡:LAUNCHXL-F280049C 评估板 | TI.com.cn

学习基础

  1. 拥有板卡。
  2. 芯片手册:TMS320F280049C data sheet, product information and support | TI.com

    1. 用户指南:用处不大,但是可以快速开始:SPRUII7B | 德州仪器 TI.com.cn
    2. 用户手册:虽然但是,其实MidWare里面东西更多:ZHCA981F | 德州仪器 TI.com.cn
    3. 板卡手册:盒子里面丢了可以看看:https://www.ti.com.cn/cn/lit/ug/swau114c/swau114c.pdf
  3. 拥有MyTI账号:所有下载都需要这个账号

  4. 速通TI的心:其实不比STM32难太多
  5. 准备开始

板卡导览

等我学完了做吧

软件准备

TI给人的感觉就是:==零碎==

  1. CCS: CCSTUDIO IDE、配置、编译器或调试器 | TI.com.cn

    1. 集成开发环境,安装之后装C2000就行。WEB版的下载速度也很快。
      1. 注意不要下成Theia这个给M0用的了
    2. 但是下载之后可以进行美化,详情参考大礼包。
      1. 资源管理器天天403,别用了,也没啥用,截图留念。image-20230728060355947
  2. C2000Ware: C2000WARE 软件开发套件 (SDK) | TI.com.cn

    1. 类似于CUBE给你下的支持包,有例程,而且比CUBE那个辣眼睛的HAL库不带CUBEMX配置好看点。
    2. 文件结构如下:(注意,以下目录结构来自5.0版本,升级之后酌情对照)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    .
    └── C2000Ware_5_00_00_00 # 根目录
    ├── C2000WareUpdater.exe # 更新器,没用
    ├── C2000Ware_5.00.00.00_manifest.html # 类似于许可证,可以查看支持的板卡和库的级别
    ├── C2000Ware_v5.00.00.00_Release_Notes.pdf # 发行说明,没用
    ├── archive # 没用,存了个历史的库
    ├── boards # 给硬件看/你板子要看原理图的时候看
    ├── change_log.html # 没啥用
    ├── device_support # 军火展示+一些老的用寄存器写的例程(基本不用看)
    ├── docs # 目录导航`/docs/c2000Ware_quickstart_guide/html/index.html`
    ├── driverlib # 你滴库函数!!
    ├── examples # 重新导向你滴库函数
    ├── kernel # RTOS
    ├── libraries # 第三方库
    ├── license.txt # 法律文件
    ├── training # 类似于靶场,但是很烂
    ├── uninstallers # 卸载器
    └── utilities # 一些工具,目前没用
    1. 根据doc文档中说明如下:

    | Directory Name | Description |
    | ——————— | —————————————————————————————— |
    | .metadata | 包含 C2000Ware 资源浏览器独立 GUI 文件。请勿修改。 |
    | boards | 包含 C2000 controlCARDS的硬件设计原理图、BOM、gerber 文件和文档, |
    | device_support | 包含所有特定于设备的支持文件、位字段标头和设备开发用户指南。 |
    | docs | 包含 C2000Ware 软件包用户指南和所有软件包文档的 HTML 索引页。 |
    | driverlib | 包含特定于设备的驱动程序库和基于驱动程序的外围设备示例。 |
    | examples | 包含涉及多个设备/外设的示例,以展示不同的应用。 |
    | libraries | 包含特定于设备的库和核心库。 |
    | uninstallers | 包含 C2000Ware 卸载程序。 |
    | utilities | 包含开发实用程序应用程序,如闪存编程器、Windows 驱动程序和第三方软件 |

    4. 啊对,这么重要的东西CCS是不会给你下的。
    
  3. SysConfig:TI-CubeMX:SYSCONFIG IDE、配置、编译器或调试器 | TI.com.cn

    1. 功能没那么强大,而且需要手动添加软件包。image-20230728060521577选中<盘符>:\ti\C2000即可。
  4. ControlSuite:一个老的库支持软件,但是支持全中文。
    1. 里面有一些实用案例,结构还可以,可以拿来看。
    2. 和Ware一样,不创建启动方式,自己进去找。

迁移可以参考:https://www.ti.com.cn/cn/lit/ug/sprui45c/sprui45c.pdf

  1. 其他电机、控制包请参考大礼包 :)。

第一个工程模板

非常重要,直接面向C2000Ware编程的第一步!

创建你的英雄

直接放目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
├── .ccsproject	# CCS创建的工程文件
├── .cproject # CCS创建的工程文件
├── .project # CCS创建的工程文件
├── App # 应用层,你编写的逻辑等
│   ├── inc # 你自己的库
│   └── src # 你的主要逻辑
├── Bsp # SysConfig生成的你自己的班级支持包
│   ├── board.c
│   ├── board.cmd.genlibs
│   ├── board.h
│   ├── board.opt
│   ├── c2000ware_libraries.c
│   ├── c2000ware_libraries.cmd.genlibs
│   ├── c2000ware_libraries.h
│   ├── c2000ware_libraries.opt
│   ├── clocktree.h
│   ├── pinmux.csv
│   └── untitled.syscfg # 双击可以进入配置界面
├── C2000Ware # \driverlib\f28004x\driverlib 全部内容
│   ├── ccs # 需要引用头文件,其中,DEBUG和RELEASE需要分开引入/排除
│   ├── inc # 寄存器层的东西
│   ├── …… # 其他DriverLib
├── Cmd # 烧写算法文件,原始地址为:\device_support\f28004x\common\cmd 按需选用
│   ├── 28004x_cla_flash_lnk.cmd
│   ├── 28004x_cla_ram_lnk.cmd
│   ├── 28004x_generic_flash_lnk.cmd
│   ├── 28004x_generic_ram_lnk.cmd
│   ├── 28004x_iqmath_flash_lnk.cmd
│   ├── 28004x_iqmath_ram_lnk.cmd
│   ├── 28004x_launchpad_demo_flash_lnk.cmd
│   ├── 28004x_launchpad_demo_ram_lnk.cmd
│   └── f28004x_headers_nonbios.cmd # \device_support\f28004x\headers\cmd
├── Debug # CCS自动生成的调试文件
├── Device # 设备描述文件,只要选用这几个即可,原始目录:\device_support\f28004x\common\include和source当中
│   ├── device.c
│   ├── device.h
│   ├── driverlib.h
│   └── f28004x_codestartbranch.asm # 板卡启动文件
├── Lib # 按需使用的C2000的库
└── targetConfigs # CCS生成的
├── TMS320F280049C.ccxml # 你的烧录器配置文件
└── readme.txt

主要构建步骤如下:

  1. 创建各个文件夹,并拖入文件:Cmd,Device,C2000Ware

  2. 使用SysConfig生成BSP,直接保存全部文件(右下角)image-20230728060700456

  3. 进入CCS之后创建工程,需要设置的地方如下:右键项目属性进入:

    1. 使用的RuntimeSupport和OutputFormat,以及使用的连接器/连接件也可以直接放在工程当中(Cmd,然后禁用其他的):image-20230728060810966
    2. 预定义设置DEBUG宏:image-20230728060905079
    3. Include(注意在引用Ware当中的2000之后,还需要引入Debug并且屏蔽Release(3个lib都需要屏蔽!):image-20230728071302694
    4. 右键禁用其他的连接文件,以免造成困扰:image-20230728061040737
      1. 推荐使用generic系列的。
    5. Main中建立主函数,构建如下,初始化顺序参考官方例程,如:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #include "device.h"
    #include "driverlib.h"
    #include "board.h"

    /**
    * main.c
    */
    int main(void)
    {
    Device_init(); // 初始化设备
    Interrupt_initModule(); //初始化中断
    Interrupt_initVectorTable(); //初始化中断向量表


    Board_init(); //SysConfig文件引入

    Interrupt_enableMaster(); //开启中断

    while(1);


    return 0;
    }

外设

大礼包

一些“增值目录”

  1. TI官方软件板卡说明:C2000™ 软件指南 — C2000™ 软件指南 (ti.com)
  2. TI官方C2000主页:C2000 实时微控制器 | TI.com.cn

C2000的美化

CCS的汉化

  1. 众所周知,CCS是基于Eclipse的二次开发,那么,采用Eclipse的汉化方式当然可行。
  2. 帮助->安装新软件image-20230728054051651
  3. 名称随意添加,位置请添加:https://mirrors.tuna.tsinghua.edu.cn/eclipse/technology/babel/update-site/latest/
    1. 这是清华大学的babel镜像源,根据地理位置选择,搜一个。
  4. 然后在babel列表Fetch出来之后选择:image-20230728054225650
  5. 下一步下一步。

主题选择和美化

我这里安装我喜欢的暗色主题

  1. 帮助-->Eclipse市场,等待载入之后选择Poular,很快找到:image-20230728054402100
  2. Icon挺好看的,但是第三个安装不了(CCS缺JAVA包),点完了就点下一个吧。image-20230728054442741
  3. 安装完后如果不满意的后续更改:
    1. 窗口-->首选项-->常规-->外观:使用主题:image-20230728054546999
    2. 随后点击Open Color Themes Page进入主题的修改页,可以快速搭配,Enjoy!image-20230728054659114我的:Af7-Qw
    3. 如果有其他好看的主题请分享给我捏。

CCS使用小技巧

  1. CCS是默认开启代码补全的,只是需要快捷键触发,默认快捷键为:Alt+/

    1. 需要修改可以在首选项-->键当中搜索内容辅助进行修改:image-20230728054931246
  2. CCS恢复默认窗口:窗口-->透视图-->复位透视图根据需求恢复吧。image-20230728055002376

  3. Eclipse没有Copilot,但是应用商店里面有这个叫做Tabnine的插件,可以提供代码自动补齐,虽然反应不是很快;image-20230728064333468

    1. 在和我一起建立软件包之后,可以直接在code进行代码查找和开发哦w
    2. 白嫖Copilot的劳动力

基础命令和服务部分

背景故事:呜呼哀哉,我因为没有趁着第一波危机从学校逃跑,不幸地阳了,没有精力完成实验报告和拷贝文件,只好在家远程连接到学校的电脑上完成作业,他需要做一些操作让他的台机能在家中被连接。

  • 我已有的知识:

    • Linux基础服务命令:systemctl,crontab……
    • 网页搜索能力
  • 我已有的设备:

    • 台式电脑:在宿舍,运行Windows11和Ubuntu22.04.1
    • 香橙派3:在宿舍,运行Ubuntu18.04
    • 笔记本:带回宿舍用以连接
  • 我需要做的:

    • 让香橙派能够唤醒台式电脑
    • 保持宿舍需要每时每刻发包的电信网络不断网
    • 让这两台设备能够被远控
  • 解决方案:

    • 唤醒问题:使用魔术封包的方法让主机支持WakeOnLan
    • 联网问题:使用crontab定时任务,让香橙派每一分钟给路由器发包,保证联网保活的包不断
    • 远程连接问题:使用内网透传工具

服务构建

保活:Crontab定时命令服务

数据包流量分析

背景故事:由于电信网络糟糕的设计,每次重启路由器时(即断电后第二天),都需要重新重新验证,所以必须进行保活处理。

  1. 首先验证网络登录方式,使用BurpSuite对登录网络进行抓包:(由于现在是远程访问,就改包越权访问到主页演示一下orz,一旦登出我两台设备都没网了害得等服务主动发包帮我续上)image-20221218132940999

    1. 最终抓到的包为:image-20221218133130102
  2. 稍稍修改为curl命令的语法并写成可以直接运行的脚本形式:image-20221218133246914

    curl命令语法:curl命令用法_追梦菜鸟的博客-CSDN博客_curl语法

    基础语法为:curl [options…] ,主要有:

    1. -H/—header LINE (H) # 添加请求头, 可添加多个 -H 参数,参数格式: -H “NAME: VALUE”
    2. -o/—output FILE FILE # 把响应内容输出到指定文件
    3. -F/—form CONTENT (H) # 参考格式: -F “name1=@/filepath” -F “name2=stringvalue”
    4. -b/—cookie STRING/FILE (H) # 请求头的 Cookie 字段, 以字符串的形式提供,**或从指定 cookie 文件中读取
    5. -d/—data DATA (H)
  3. 这时候可以使用终端运行脚本进行验证:image-20221218133346827

  4. 下面把脚本使用scp命令拷贝给香橙派之后进行定时任务的书写:image-20221218133620133

    SCP命令用法为:Linux scp命令 | 菜鸟教程 (runoob.com)

    1. 本地到远程:scp local_file remote_username@remote_ip:remote_file
    2. 远程到本地:scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3

Crontab保活

网上一般的都是比较老的/etc/cron和直接开启crond服务,但是ubuntu升级到systemctl下的系统步骤较少,这里随便试一下成功了。

  1. 我这里ubuntu自带了crontab的命令。image-20221218134507120

  2. 调用cron -e选择vim进行服务文件的编辑。cron的格式为:《crontab命令详解 含启动/重启/停止》

    在以上各个字段中,还可以使用以下特殊字符:

    • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

    • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

    • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

    • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

  3. crontab -l列出cron服务内容:在每分钟执行一次curl的操作,同时在每小时删除一次日志文件。cron当中必须使用绝对路径,否则会运行失败。image-20221218135121983

    1. network.sh内容:将内容存入tmp.txt日志当中。image-20221218135244996
  4. 接下来使能服务,注意ubuntu中cron的服务不是crond,而是cron.serviceimage-20221218135419224

    systemctl基本的服务操作:

    1
    2
    3
    4
    5
    6
    $ systemctl start   <docker>.service    //启动
    $ systemctl restart <docker>.service //重启
    $ systemctl stop <docker>.service //停止
    $ systemctl reload <docker>.service //重新加载
    $ systemctl enable <docker>.service //加入开机启动
    $ systemctl disable <docker>.service //取消开机启动

    systemctl配置详解:

    详细讲解systemctl(附常用指令) - 掘金 (juejin.cn)

  5. 可以观察tmp.txt日志文件看看是不是真的curl了,也可以使用systemctl status <service>进行日志查看:image-20221218135844577

  6. 可以看到已经成功了。

远程登录开启

由于我的路由器时电信送的便宜玩意,管理后台特别烂,所以只有DHCP的局域网IP分配,非常伤心。无法配置todesk的远程唤醒,只能使用ubuntu下的ethtools工具进行相关配置。

所以我大概是简体中文ubuntu22唤醒第一人了?

国内互联网上的资料非常老,在服务管理这一块用的还是古老的rc.local方式,而这种方式在ubuntu22当中根本就没有被使能,所以必须还是使用systemd的方式进行服务的追加和保活。

被唤醒主机

  1. 安装ethtool软件包:sudo apt install ethtool -y

  2. 更改并查看网卡状态,将网卡的在线唤醒模式开启:sudo ethtool -s enp5s0 wol g

    1. 使用ethtool enp5s0查看网卡状态,Wake-on:这一项为g表示已经开启了唤醒:image-20221218140530400
  3. 但是由于Linux万物皆文件的特性,在重启时,网卡的配置文件会被覆盖,因此采用systemd的方式,编写系统服务完成自动唤醒网卡的操作:

    1. 使用--preserve-env操作进行提权,直接编写systemctl服务:sudo --preserve-env systemctl edit --force --full wol-enable.service

      1
      2
      3
      4
      5
      6
      7
      8
      9
      [Unit]    # 服务本身的名字和说明
      Description=Enable Wake-up on LAN

      [Service]
      Type=oneshot # 只执行一项任务、随后立即退出的服务
      ExecStart=/sbin/ethtool -s enp2s0 wol g # 执行的命令,注意ethtool的位置是在sbin下的,泪目

      [Install]
      WantedBy=basic.target # 挂载在basic.target下,优先级必须比我用户启动高
    2. 详细配置2.0:linux systemctl 指令 —— 阮一峰 - 七脉 - 博客园 (cnblogs.com)

唤醒机器

  1. 查询到被唤醒机器的mac地址之后,使用魔术封包即可唤醒,也是安装个wakeonlan软件包就行。image-20221218141250231

  2. 可以看到ubuntu的软件包是全局发送的,不像windows下某些解决方案必须固定ip。

    1. 个人学了基本sdn控制器之后的理解大概是路由会记住主机的mac表然后发送给对应主机。
  3. 为了配合简洁使用写了个flask服务:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @app.route('/', methods=['GET'])
    def hello_world():
    return '''
    <form action="/" method="post">
    <input type="submit" value="SendRemoteRebootMessage">
    </form>
    '''

    @app.route('/', methods=['POST'])
    def post():
    import subprocess
    subprocess.call('./a.sh')
    return '''
    Successfully Reboot from remote
    <form action="/" method="post">
    <input type="submit" value="Resend Message">
    </form>
    '''
    1. 对应服务程序:由于flask这个pip包的原因,不能使用nohup&在后台运行,所以状态一直是loaded,但是日志是没有问题的。image-20221218141622686
    2. 来点cpolar透传5000端口之后的样子:image-20221218141901735

外网透传和远控

  1. 透传使用的是cpolar白嫖的三个通道,配置方法在文档里面很详细:https://www.cpolar.com/docs,还有`9200端口`的webui,基本上很无脑:![image-20221218142023423](http://picgo.malossov.top/malpicbed/image-20221218142023423.png)
  2. 控制方面使用的是toDesk,非常流畅,也是对Linux支持较为友好。image-20221218142149380

后续使用

双系统切换

电脑的默认引导加载程序和管理器因为安装了Ubuntu的缘故被设置成grub2,因此其实对于引导的修改就是对于grub2启动项的修改。

Grub2在UbuntuWiki上的介绍:↓简单的部分中文翻译和理解:这里为软件包相关配置,不涉及到grub控制台的配置

  1. Grub2介绍: 是引导加载和管理工具,在进入的时候会提供界面等待用户选择,或者将控制交给系统内核(可以是任意被识别到的系统内核)。

  2. 文件结构:

    1. /etc/grub.d(文件夹):Grub2脚本
    2. /boot/grub (文件夹):Grub2模块和菜单文件(grub.cfg
    3. /etc/default/grub :(配置文件)用户主要修改通过这个文件
      1. 应用配置更改:修改grub.d/etc/default/grub后,运行update-grub,来修改/boot/grub当中的内容。

Linux切换到Windows

修改grub配置文件,并且运行sudo update-grub即可。

image-20221218141710251

Windows下切换回Linux系统

  1. 让Windows正确识别到Linux的文件系统并且能进行修改
    1. 在网上陆续找了一些能识别ext4文件系统的软件但是都效果不佳,最终找到Linux File Systems for Windows | Paragon Software (paragon-software.com)可以将Linux盘挂在到Windows系统文件管理器当中image-20221218123143305
  2. grub的描述当中可知,grub在进行启动引导时,使用的是/boot/grub当中的模块和菜单文件。直接修改/boot/grub/grub.cfg菜单文件,将默认启动选项移到windows11对应的启动菜单栏目即可。image-20221218122929405

意外失去连接之后怎么办

  1. 此时局域网还是连通的,使用nmap扫描当前网段的内容。

  2. 使用cpolar远程登录到香橙派中。

  3. 使用命令:nmap 192.168.101.1-10 扫描10个ip,一般情况下dhcp会将PC分配在1-10当中。因为我都开启了ssh服务,可以通过香橙派作为中继连接主机的ssh服务image-20221218132505568

  4. 此时pc被分配在192.168.101.6上。ssh连接之后重启服务或者重启。

  5. 扫描时可以添加如下选项:

    1. Windows如果无法扫描到,添加:-Pn 禁止ping访问确定主机是否存在,强力联通;

      扫描速度太慢,给予sudo权限之后添加-sS进行扫描,更改连接方式,不需要经过TCP三次握手;

      或者选择经过TCP三次握手但是修改timeout超时时间,如:--host-timeout 10

关于为什么咕咕了那么久就上传了这个

因为实在是太纯阳了。

IMG_20221218_142310

科协软件:STM32简介

所有内容在组会上已经尽量和大家解释过了——内容上,只是做一个科普,了解一下将来如果选择软件路线自己可能做的事情,以及未来需要掌握的一些技能。等你真的做到了,熟练了,都不难。——就和你在EXCEL表中增删查改一样简单(大概)

我会尽量简化我的语言保证绝对的口语化

STM32单片机是什么

让我们按照定语越来越多的方式走进它:

  1. 是一款MCU/单片机。

    1. 即微控制单元(Microcontroller Unit;MCU),也就是我们常说的单片机(单板计算机)

    2. 望文生义,单片机就是一片芯片就能组成的计算机。可以说,MCU就是CPU的小兄弟,但是自带了一套存储设备,不需要另外购买——相当于你电脑里CPU+硬盘+内存条 三者合一之后的东西。

    3. 但是MCU性能比CPU弱很多,内存和存储能力也弱很多。

    4. 相比于CPU也更加注重 “控制”,拥有很多的接口:就像一台带着很多USB接口的电脑(只是单片机的接口可能不叫USB,但是可以对其他模块进行通信和控制。)

  2. 一款ARM内核的MCU/单片机。

    1. ARM内核 我们不去多了解,我们只需要知道,ARM内核执行的指令和你的电脑是不一样的,因此我们需要特殊的工具对单片机进行“跨指令集”的编程。

    2. 因此如果需要调试、运行你写出的代码,也必须下载到单片机上——因为我们的电脑无法直接运行单片机使用的机器码,他们的指令集不一样。

    Q: 为什么我们不能在单片机上直接编程?它不是和计算机差不多吗?

    A: 单片机的算力和存储能力都极为有限,只能运行写好的代码。而不能直接在单片机上编程。

    同样地,单片机的运行的程序也比电脑上的程序更加底层,没有操作系统作为辅助帮你自动分配好一些东西,需要直接对硬件发出一些指令。(比如:电脑会自动识别你插入的U盘,但是单片机如果想使用USB,就需要自己手动配置USB相关的外设。)
    
  3. 一款ST公司出品的ARM内核的MCU/单片机。

    1. ST公司生产了这款芯片,也为我们提供了技术支持。我们可以使用ST公司给我们提供的软件更加方便地编写单片机程序。

如果还不理解,可以看一下B站各路大佬的视频,直接搜索:STM32是什么即可。

STM32单片机能干什么?(简易版)

  • GPIO(通用输入输出)

    • 名词解释: 通用,就是说它是万金油,干什么都行。输入输出,就是说既能当输入口使用,又能当输出口使用。

    • 热知识:单片机的输入和输出只有两种,高电平和低电平,可以理解为高=1,低=0。在STM32中,高电平约为3.3V,低电平约为0V)

    • 应用场景: 开关控制(高电平开,低电平关——点灯就是利用了这一点),按键输入(能够读取外部电平的变化,判断电平高低。),模拟接口……

    • 推荐阅读: 硬件工程师必看:GPIO用法大汇总 - 知乎 (zhihu.com)

  • UART(串口通信)

    • 名词解释: 串口,首先是”串“,意思是串行,将一长串数据切成一个一个0和1,每次发送一位——可以想象一下十字路口车子通过红绿灯的场景。“口”,则表示两边需要相互连接好,就像车辆不能逆行,同一组串口也只有一组通路(导线)互相连接,才能实现通信。

    • 热知识: 同理,并行的意思就是,一次性发送全部数据,可以在一次被读取,可以想象一下赛马时所有马一起出闸的场景)

    • 应用场景: 像C语言中,我们使用printf向屏幕打印信息。串口则可以通过CH340模块和计算机连接,向计算机发送信息,也能像scanf一样从计算机中读取信息(但是用法差异较大,这里方便理解)。当然,串口也可以用在单片机对单片机,单片机对模块的通信当中。

    • 不推荐的推荐阅读: 串口通信(UART)介绍 - 知乎 (zhihu.com)——不建议现在阅读

  • ADC(模拟-数字转换器)

    • 名词解释: 将一个电压值转换成一个数字值,把它理解为单片机上自带的电压表就行。

    • 热知识: STM32中,只能测0-3.3V的电压。

    • 应用场景: 你用电压表做的事情它都可以做——求电阻两端电压并计算出电流……

  • 各类通信接口:I2C,SPI等:

    • 名词解释: 可以理解为电脑上的USB接口,雷电接口,用来和其他设备通信。而I2C,SPI是这些接口的通信标准/协议,单片机用这些接口和其他模块进行通信。

    • 热知识: 以后再说

    • 应用场景: 可以用他们为单片机连接一块屏幕,显示你需要的内容;连接其他协议相同的模块,指挥它们工作。

  • TIM(定时器):

    • 名词解释:就像你定了一个闹钟提醒你做事一样,单片机中定时器也会计时一段时间,然后触发它去做某些事情。

    • 应用场景: 像我们“点灯”时,也可以使用定时器,在计数到一定时间时去点灯。但是在“等待”定时器周期时,单片机也可以忙其他事情,有效提高了效率。

  • 其他: 单片机还有很多强力功能,希望后来大家能在科协把他们实践出来。

一些软件的学习建议

STM32配套软件的推荐安装和器件购买

软件的推荐安装

首先下载群内精华消息中的压缩包:

然后解压这个压缩包之后,你会发现如下目录↓

其中,圈出为红字的就是我们需要安装的软件。

接下来,我会分别介绍这些软件是做什么的。

至于安装教程?——最下面那个软件初步就是我们的安装教程。

  • 01-MDK535 :就是学长口中常说的KEIL,是用来编译单片机程序和进行程序的下载、调试的。

  • 06-CUBE MX:是用来简化配置工程过程,进行单片机相关功能配置、生成工程文件的的。

简单来说:如果写单片机程序是炒一盘菜。

  • CUBE MX,就是洗菜、切菜的菜刀。

  • KEIL就是把菜炒成菜的锅。

  • 04&07-串口套件:04是一个串口驱动,08是能让电脑显示串口信息的上位机。

  • 08- CUBE PROGRAMMER:可以进行有高级设置的程序下载。(目前阶段用的不是很多)

  • 软件初步:教你安装软件的视频!

  • 其他:

    • 09 & 10 硬件要用的,等宋羽学长讲。

    • 其他:暂时不用


器件购买

以管理员胡哥发表的器件购买指南为准:


↑以上器件的作用:

  1. 最小系统板:单片机主要的开发平台,本质上就是芯片+必要电路+排针,用来快速验证我们需要验证的功能。

  2. ST-LINK:下载器、调试器,作用就是把程序下载到单片机中,也能调试程序的运行。没有它,你无法下载程序。

  3. CH340:用来串口通信,可以让单片机向你的电脑打印hello-world!


重要提醒:阅读本章节前,你应该学会使用apt和dpkg作为包管理工具。恩好。

WPS

在网上有很多让你重新安装openssl的方法,我表示很坏,容易卸载掉依赖,很容易炸,尤其是dpkg解决不了直接用了aptitude/apt的情况下。正解请看:

解决方法分两步:
第一步, 给WPS的安装目录设置777的权限[必须]

1
sudo chmod 0777 -R  /opt/kingsoft/wps-office

第二步, 删除之前WPS的安装设置[必须]

1
rm -rf  ~/.config/Kingsoft/

在最新版本的Ubuntu中已经解决了这个问题。

UBUNTU下的QQ

星火商店作死把自己作没了,真要看QQ还的看:Icalingua++

这个可以配合mysql一块装着玩玩,主要是mysql不容易卡,sqlite容易祭。

搜狗输入法

按照搜狗官方来就行,ibus可以装个扩展:ibus tweaks加上导入词库用,但是还是不方便,删了好。【22.04按照20.04进行安装】

可以和Windows下一样进行细胞词库的添加,但是无法进行皮肤的安装,打包方式不一样。

  • 如果配置界面出不来,按Alt+F7 可以将窗口拉回正常位置。

注意: 搜狗输入法如果在英伟达显卡的电脑下依赖英伟达显卡驱动,在系统升级后有可能出现输入法消失,此时需要按照我之前说过的方法进行显卡驱动的重新安装和配置,而不是瞎折腾。

Mysql

主要是当时做项目的时候离不开,现在写一下也无妨。

  1. 首先进入MySQL数据库的官网:MySQL :: MySQL Community Downloads

  2. 下载apt repository的包,添加PPA之后可以进行mysql的安装。

  3. 使用方法见官方:MySQL :: A Quick Guide to Using the MySQL APT Repository

  4. 有的时候如果安装过程中跳不出密码选择,参照这里:

1
2
3
sudo mysql -uroot
# 初始无需密码登录,登录后:
alter user 'root'@'localhost' identified with mysql_native_password by '新密码';

DBeaver,VSCode,Idea,Clion……

不建议用snap安装,首先是更新的时候还是.deb包,其次是输入法有时有问题,建议直接官网下包。

Jet系的加个环境变量就行,tar.gz装着奇怪用着还行。

立创EDA俩

终于把他们那个菲拉不堪的安装脚本整好了,现在能一步装,原来还要加权什么的。

网易云音乐

有官方linux支持版本,但是一年没更新就落后了。具体操作见:Ubuntu22.04运行网易云音乐错误_weinigb的博客-CSDN博客_ubuntu网易云音乐打不开

当然,更好看的第三方是很多的,比如YesPlayMusic,具体安装可以见Github。

Node.js

推荐版本16 同时使用snap安装

重要提醒:阅读本章节前,你应该学会使用apt和dpkg作为包管理工具。同时知道ubuntu下开启终端的快捷键,并且能够自己阅读报错解决冲突。恩好。

UBUNTU——从装完到装死

系统安装

主要参考这篇,注意一定要关闭安全启动,同时安装的时候选择空的盘符进行安装。Ubuntu系统22.04 LTS安装|U盘安装Ubuntu 22.04系统_白云一键重装系统

装完之后系统很丑,不截图了 真的丑。

系统美化

  1. 美化开始前,安装WattToolkit,在这部分当中互联网上没有教程。自我总结如下:

    1. 首先按照官方的提示敲入命令,之后重启软件,此时443端口能够开放连接。

    2. 但是!但是! 你会发现浏览器仍然上不去网,问就是证书还没有签。

    3. 这个时候需要用到openssl 进行证书的自签,否则加速无法生效。具体教程参考:(在一般情况下,证书会在:~/.local/share/Steam++/SteamTools.Certificate.pem

    1
    2
    3
    4
    openssl x509 -in 证书名.cer -out 证书名.pem
    openssl x509 -outform der -in 证书名.pem -out 证书名.crt
    sudo cp 证书名.crt /usr/local/share/ca-certificates/证书名.crt
    sudo update-ca-certificates
     4. 同理,当遇到浏览器不安全时,同样按照对应浏览器方法添加`.crt` 后缀的证书。
    
  2. 至此,可以通过WattToolkit 进行github的加速,方便我们进行后续主题的添加。这里建议使用Hosts模式 进行加速,不容易影响系统的socket连接。

  3. 接下来更换系统的源配置,注意:并不用使用CSDN上直接改sources.list的方法,可以直接在软件更新器中进行源的选择:随便选择一个在中国的源就可以(我直接选择了位于中国的服务器,当然选择其他服务器->华为/清华都可以

  4. 现在进行GNOME桌面的美化组建的安装注意,在这部分当中,CSDN有很大误导作用,在22.04LTS中,已经不存在gnome-tweak-tool这个包 取而代之的是,我们应当直接使用命令安装优化工具和插件:sudo apt install gnome-tweaks

    1. 注意,在安装插件时,大多数互联网上的教程又错了,很多包冲突。但是,其实也只要再安装3个包即可安装主题美化的解锁:
    1
    2
    3
    sudo apt install gnome-shell-extension-manager  
    sudo apt install gnome-shell-extensions
    sudo apt install chrome-gnome-shell
     2. 这时,打开启动菜单中的**Extension Manager** 之后选择Browse,安装扩展`User Themes`才能够自主安装我们的主题,此时在”优化“中进行查看,可以看到Shell(即主题)这一项终于被解锁,喜大普奔。![](UbunSet/2022-09-04-10-50-10-image.png)
    
  5. 下面正式开始安装主题,我比较喜欢的是模仿Mac的一款,在这里可以查看:Mac Big Sur pling

    1. 注意: 一定要保证完全按照github上的readme进行安装,虽然大部分时候都是直接解压之后->cd进入目录->./install,但是特殊情况(比如作者的grub主题)仍然需要谨慎阅读。
  6. 可以通过:GNOME Shell Extensions 下载需要的主题。如4中所用的工具一样。不多解释,装上浏览器插件就是很舒服。
    1. 不要使用snap版本的浏览器 比如自带的火狐,问题难以排查。

随便装了点,纪念一下美化效果:

接下来是终端的美化

终端是你吃饭喝水的地方,尤其推荐zsh,默认的bash就是快了点,各种补全等不尽人意。

不太懂,但是完全可以按照这篇文章来做ubuntu美化教程(如何美化你的Ubuntu终端) - 科猫网,不愿意看着打的看这篇:ubuntu美化终端_wukuy的博客-CSDN博客_ubuntu终端美化,装上oh-my-zsh

同时,注意,此刻你的用户配置文件由.bashrc转换为.zshrc ,之后的环境变量需要在.zshrc 当中进行配置。

终端最终的美化效果,其实我觉得挺丑的,有点像kali,笑der.

其他的小问题

1. 遇到的情况

由于Ubuntu在本月不久前发布了22.04的最新patch——22.04.1,按照常理,这意味着22.04这个大版本的生命周期终于来到了较为稳定的阶段,但是个人升级后首先感到的是很多适配等做的并不良好。

在使用这个版本时,我们采用的显卡驱动版本为:

在升级前,这个驱动运转良好。而在升级后,系统出现了登录界面无法进入桌面的情况。初步直接排查为该显卡驱动出现问题。

2. 解决

  1. 首先运行命令:
1
sudo ubuntu-drivers autoinstall

果然安装了几个缺少的nvidia包,但是再重启并键入:nvidia-smi之后,依然显示没有找到驱动,情况并未有得到改善。

  1. 接着,按照网上的教程,在安装dkms(一般为自带)之后,通过命令查看nvdia驱动具体版本:
1
ls /usr/src | grep nvidia

得到结果为:5.15.0-41 再观察以下之前安装的linux-headers的版本,很明显是在大更新中升级了一波系统版本,但是对应的软件包没有升级,于是运行:

1
sudo apt-get install linux-headers-5.15.0-41-generic

再次键入uname -a得到

Linux Air14Plz 5.15.0-41-generic #44-Ubuntu SMP Wed Jun 22 14:20:53 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

内核升级完毕

  1. Reboot ! 再次查看驱动情况:

此帖完结,FUCK NVIDIA!

(PS:没错,这倒霉玩意让我Fcitx4用不了了=搜狗输入法没了,但是并,其实iBus导入词库和预测之后还是挺不错的,放上链接和改字号的插件:

关于JDK

好用:ubuntu安装JDK17 - 简书 (jianshu.com)——看来是只能用WGET来做了,操作的目录和这一篇一样都在opt目录下

关于无法启动宝塔

关于换源

关于在宝塔上面配置TOMCAT

其实也没必要依靠宝塔,但是既来之则安之的事情嘛……
还没看,太困了,链接我觉得还行的线放这
就是思路有些混乱

关于经常进不去VSCODE的server

更好的TOMCAT配置教程

在哪里找到我们的服务器?

  • 一开始我想当然的以为会在腾讯云控制台中,但是搜寻一番之后发现结果不尽人意
    • 后来想想其实我自己用腾讯翻译API的时候也不是在控制台中
    • 经过求助知乎,发现——
  • 可以参考知乎回答:(54 封私信 / 81 条消息) 腾讯云如何查看自己的服务器? - 知乎 (zhihu.com)
    • 但是这个之乎回答也是坑,虽然能找到,但是需要鼠标和眼睛寻找的地方还是太多
    • 我发现一个更好的方法:(虽然这个方法并不能够推广,仅仅适用于轻量级的服务器
    • 略微总结即为:直接访问轻量级产品控制台:服务器 - 轻量应用服务器 - 控制台 (tencent.com)
    • Pasted image 20220416021934.png
    • 将页面拖到底端可以看到我们订单中创建的服务器

如何开始食用我们的服务器

注意: 由于咱自己玩过树莓派 所以选择了Ubuntu 20.04LTS这一派生于 Debian 的操作系统,因为比较能够方便的用apt命令来管理软件包,其他操作系统如:CentOS等习惯使用yum命令进行管理的发行版无法兼顾,非常抱歉。

开始使用主要需要面对以下两个需求:

  1. 如何安装好我们需要的软件
  2. 如何做好远程管理的准备

由于我们首先需要登录,先从第二点开始:

如何做好远程管理的准备


使用ssh登录

先修改密码

  • 服务器刚在我们手上的时候的密码是不可知的,需要手动设置,我们选择便于使用秘钥登录的SSH登录方法
  • 首先配置密码:
    • 配置密码需要在远程登录->VNC当中进行,页面如下:
    • Pasted image 20220416022801.png
    • 进行重置密码非常简单,按照要求来即可,请一定要记住自己的密码!
  • 接下来进行ssh登录的准备环节,我们首先使用PowerShell对于ssh命令进行测试。
    • 一般情况下Windows自带该命令,如果没有自带可以求助万能的百度

      再来看ssh

  • 使用ssh命令远程登录的命令在一般使用时的 格式为:
    1
    ssh [用户名]@[通道地址] -p [端口号]
  • 例如:ssh malossov@192.168.0.4 -p 22
    • 一般情况下,端口号默认为22我们不必输入
    • ubuntu系统的默认用户名应该为:ubuntu
      个人观点:在小组合作时不建议修改和创建更多用户,甚至不建议使用su命令进入root身份。因为这样可能导致不同用户创建的文件其他人无法访问和修改,导致各种奇怪的问题,尤其是需要自己搭建自启动的系统服务的时候。
  • 我们输入命令后如果是win10等版本自带的Open-ssh会提示是否保存对该IP的登录信息,我们选择yesPasted image 20220416024000.png
  • 接下来会要求输入密码,输入成功后即可进入系统
    • 注意,SHELL下LINUX输入密码一律不会出现字符显示,输入就完了
  • 恭喜你 已经学会了SSH!

当然不可能,我们还需要下一步:配置SSH秘钥来让我们的登录变得方便


SSH的秘钥配置

认识秘钥

首先按照我的理解两句话介绍一下什么是秘钥以及为什么我们需要秘钥:

  1. SSH默认采用的密码很不安全,虽然你记着很难受,但其实破译很容易;
  2. 所以如果校验秘钥的话就会方便很多,我们在SSH命令的时候就进行秘钥的校验可以更加安全,也更加快速地连接我们的服务器。
    起码在我的个人经验看来,很多时候都是只允许秘钥登录而不允许密码登录的。当然对我个人而言:更多的是不用输入密码可以偷懒
生成和配置秘钥

密钥分为公钥私钥两个部分,而这两个部分的运作过程是:

  1. 公钥保存在服务器上,私钥保存在个人计算机上。
  2. 在ssh时,服务器发来数据,个人计算机用私钥进行签名后返回服务器进行验证,一致即可登录
    从上来看,秘钥一定是成对出现的,而且是通过同一台用户计算机生成的,公钥是用户计算机放到服务器上的。

这里因为前面已经登陆过服务器,下面使用用户计算机开始生成秘钥,

  • PowerShell中使用命令ssh-keygen生成秘钥,默认使用RSA算法进行加密(膜拜杨神,会自己做RSA加密),如果使用-t参数,则可以指定加密算法。Pasted image 20220416030842.png

    • 在所有问题的选项中,其实敲Enter就行,主要是相关文件名称和密码保护的,这里默认就行,需要关注的为:

      Enter file in which to save the key ((C:\Users\MALossov/.ssh/id_rsa)

  • 这行文字表示我们的秘钥保存的地址为我们的用户下的.ssh文件夹,文件名为id_rsa,如果是使用服务器进行生成可以更好地看清这一过程。

    • 我们使用ls -a目录可以看到 .ssh 这个隐藏文件夹就在我们的用户目录下(LINUX中~表示用户目录(/home/用户名),而上一条windows宏对应的命令输出为:Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa)——它是对应我们这个用户的ssh秘钥,接下来进行一波查看Pasted image 20220416025743.png
    • 可以发现公钥私钥其实是放在同一文件夹下的
    • 如果有必要可以使用chmod命令修改权限防止他人删除或改动
  • 接下来我们要做的,就是
    • 让公钥保持在服务器上不动作为校验
    • 把私钥下载到自己的电脑上作为ssh的校验方法
      • 可以使用scp命令的方法,也可以直接使用cat命令的输出进行复制粘贴。
  • 那么如何配置我们复制下来的私钥作为ssh登陆时使用的私钥呢?
  • 我们首先要找到我们本地计算机的ssh配置地址:以Windows11为例,为:C:\Users\[用户名]\.ssh Pasted image 20220416030448.png

    • 在这个文件夹下我们取出公钥并上传到服务器的~/.ssh/目录下:文件命名称和内容与本次的公钥内容不一致。
      • 校验文件的命名默认为:authorized_keys
        • 【作废】使用命令进行复制:首先复制本地秘钥的内容,cd进入.shh 目录,然后使用echo命令直接写入文件 例:echo [公钥内容] > id_rsa.pub
      • ↑这里出现了小小的问题,公钥是分为多行的,所以我们采用另外一种办法,使用Ubuntu内置的编辑器nano
      • 使用方法很简单:输入命令nano authorized_keys
      • 进入编辑窗口,复制粘贴完公钥内容之后
        • 可以直接使用右键复制粘贴
      • 使用快捷键Ctrl+X退出,按照提示保存修改。
  • 接下来测试一下,在PowerShell中登出用户,重新登录。

    • 发现不用输入密码了,秘钥的配置成功

关于Pip

  • pip的换源:根目录下:~/.pip/pip.conf内容
    1
    2
    3
    4
    [global]
    index-url=http://pypi.douban.com/simple
    [install]
    trusted-host=pypi.douban.com