stm32 基础
GPIO工作原理八种输入输出模式:GPIO_Mode_AIN 模拟输入
GPIO_Mode_IN_FLOATING 浮空输入特点是 引脚内部没有上拉或下拉电阻,引脚的电平状态完全由外部电路决定。如果外部没有明确的电平信号,引脚可能会处于一个不确定的状态(即“浮空”状态)。
比如在使能USART通信时,接收信号的引脚就要设置为浮空输入。
I/O的电平状态是不确定的,完全由外部输入决定
GPIO_Mode_IPD 下拉输入很好理解,接地,在空闲状态下是低电平。
GPIO_Mode_IPU 上拉输入接VCC,空闲时为高电平,比如在配置UART的RX引脚时就可以设置为上拉输入。
GPIO_Mode_Out_OD 开漏输出
结构:开漏输出由一个MOSFET(场效应管)构成,其漏极(Drain)作为输出引脚,源极(Source)接地。
工作原理:
当MOSFET导通时,输出引脚被拉低(低电平,0V)。
当MOSFET截止时,输出引脚处于高阻态(无电流输出),需要通过外部上拉电阻将电平拉高(高电平,如3.3V或5V)。
不同于推挽输出可以主动输出高、低电平,他只能主动输出低电平。
G ...
dji-topic
OSDK开发 获取订阅当选择的平台是Linux时,应该如何获取无人机的传感器信息呢?
大疆OnBoard SDK提供了两种方式(广播和订阅),这里讲如何订阅无人机传感器数据:
初始化订阅后,通过TopicName topicList50Hz[] = {}添加需要订阅的话题。
123456789101112131415161718192021222324252627282930// Telemetry: Verify the subscriptionint responseTimeout = 1;ACK::ErrorCode subscribeStatus;subscribeStatus = vehicle->subscribe->verify(responseTimeout);if (ACK::getError(subscribeStatus) != ACK::SUCCESS){ ACK::getErrorCodeMessage(subscribeStatus, __func__); return false;} // Te ...
Hexo+GitHub博客搭建
GitHub Page个人博客的开发和渲染界面可以使用多种编程语言和框架,可以大致分为 静态博客 和 动态博客 两种类型。这两种类型的核心区别在于内容的生成方式和是否需要服务器端处理。博客的创作的方案有:
WordPress(PHP):最流行的博客平台,支持插件和主题。
HTML、CSS 和JavaScript :博客非常简单。
Flask(Python):轻量级,适合小型博客。
Hexo(Node.js):基于 JavaScript,插件丰富(静态的)。
……
GitHub Page的推出让开发者能够创建个人或组织的展示网站,用于展示项目、简历、博客等内容。但只能部署静态的博客,因此我们选择Hexo框架。
HexoHexo框架创作自己的博客内容,Hexo 是一个快速、简洁且高效的静态博客框架,它基于 Node.js 运行,可以将我们撰写的 Markdown 文档解析渲染成静态的 HTML 网页。
图中source目录中存放的主要为博客的内容,包括post、link、tag等目录,其中post主要用来存放帖子,这些都可以自己编辑设计。对于博客的主要风格、功能设置保存到conf ...
C++ 笔记
关于编译器
gcc 主要用作 C 语言编译器,但它实际上可以编译多种语言的代码,包括 C、C++等
g++ 专门用于编译 C++ 代码
在使用gcc编译时,需要添加-lstdc++ -o ,-lstdc++ 选项用于告诉编译器链接 C++ 标准库,-o 选项指定输出文件的名称。
而在使用g++时,则无需,但要在JSON文件里修改编译器(许多软件、工具、框架都使用 JSON 作为配置文件格式)
基础知识1using namespace std;
需要避免与用户自定义的类或函数名字与__C++ 标准库__大量常用的工具和数据结构(例如 vector、string、map 等)冲突。为了避免每次都写 std:: 前缀在前面声明这样一句话。
for常见的几种使用方式:
传统的循环方式,for(int i = 0;;),如果是循环中初始化的变量,作用域只能在for循环里。
遍历容器或数组,for (declaration : container)
使用引用的范围,for (int& num : numbers)
这里的&表示引用,当函数参数是大对象时,使用值传递会导致对象被 ...
JAVA 笔记
简介JAVA三大类:
JAVASE
JAVAME
JAVAEE
主要特性:
安全性
面向对象
跨平台
原理:内部存在一个虚拟机
通过javac将 .java文件编译成.class文件
java工具运行
jdb调试工具
JDK
开源
多线程
简单易用
有许多的库、核心类库
基础知识注释:
单行注释://注释信息
多行注释:/*注释信息*/
文档注释:/**注释信息**/
关键字:class:类 …
数据类型字面量:整数类型、小数类型、字符类型、字符串类型、布尔类型、空类型(null),常量也是有变量名的,只是值不会发生改变
特殊的字面量
\t:制表符,打印时将前面的字符串长度补齐到8或是8的整数倍。最少1个,最多8个
常量使用final关键字修饰常量
整数类型{byte(8位)、shot(16位)、int(32位)、long(64位)}、小数类型{float(32位)、double(64位)}、字符类型{char(16位)}、字符串类型(是通过String类进行表示的)、布尔类型{boolean(只有true和false,默认值是false)}
引用类型相当于C ...
STM32-LCD
LCD显示 SRAM与FLASH最近在玩STM32的LCD显示时,发现了一些关于内存空间的问题。
stm32的FLASH可以类比于ROM(相当于硬盘),SRAM可以类比于RAM(内存),但也有一些区别,先不具体了解了,后面再说。
图片的表示有多种方式:RGB、HSV等。在传输图片时,一般是将图片的RGB转换成三种颜色对应的数字,数字的范围我们一般是采用从0-255,但是这也不是绝对的,可将范围变大变小,有时为了减少数据量,适当牺牲色彩的细腻也是可以接受的。由于采用的芯片STM32F103C8T6的SRAM太小,因此采用16bety的数据对每个像素进行表示,这依然有两种方式:
RGB565:用5位表示红、6位表示绿、5位表示蓝RGB555:16位数据中用5位表示红、5位表示绿、5位表示蓝,浪费一位
这里采用RGB565的方式。
由于我使用的屏幕是128*160分辨率,故需要先对图片进行按比例缩放,同时将图片数据解析为数字信息。采用python实现该功能:
1234567891011121314151617181920212223242526272829303132333435363 ...
STM32F10*系列单片机开发
开发方式常用于开发STM32的有三种方式:
直接操作寄存器
使用官方库函数
ST官方推出的HAL库
这三者区别在于:操作寄存器过于麻烦,库函数只适合某系列的STM32单片机(比如STM32F1的代码就不能直接移植到STM32F4上去),HAL库则适用于STM32全系列单片机。且目前库函数版本官方已经停止更新,大势所趋是使用HAL库。
不同芯片的开发不同的STM32芯片可以共用同一份HAL库,但是并不意味着代码可以完全不改,不同的芯片引脚数、引脚用处可能不尽相同。比如STM32F103ZET6有144个引脚,STM32F103C8T6只有48个引脚。
在开发时,我们需要查看相应的数据手册和电路板的原理图。
以网上找到的STM32F103C8T6资料为例(方便后续查找):
可以看到虽然引脚数不同,但是对于同一引脚对应的主要功能和额外功能都是相同的。因此我们在将其他芯片的代码迁移过来时,需要额外关注使用的芯片是否具有该引脚,没有则需要寻找合适的引脚替代以实现想要的功能。此外我们还需要关注芯片的外设,以下图为例,正点原子的精英版STM32F1的LED灯的引脚为PB5和PE5, ...
RC522
RC522是一种常用的无线射频识别(RFID)模块,广泛用于门禁系统、身份识别、支付系统等领域。它基于13.56MHz的射频技术,与NFC(近场通信)技术兼容,能够读取和写入符合ISO/IEC 14443 A/MIFARE协议的标签和卡片。
ic卡结构ic卡,比如我们日常使用的校园卡,以最常见的MIFARE Classic IC卡为例:包含16个扇区,每个扇区由4个块组成,每个块可以存储16个字节的数据。每个扇区的最后一个块是尾块,包含了两个密钥(Key A和Key B)以及访问条件。这些密钥和访问条件用于控制对相应扇区的读写权限。
其中扇区0:第一个扇区(扇区0)的第一个块(块0)被称为制造商块,它包含了卡片的唯一标识符(UID)、制造商数据等信息,是出厂时就写入的,而且在大多数情况下无法更改。
其他扇区可用于存放个人信息:姓名、性别、出生日期等;账户信息:余额、最近交易记录等……
因此当你给校园卡充值后,需要通过某种形式的刷卡操作,将新的金额信息写入到卡内,这样卡内保存的金额信息才会更新。
例子:扇区1的布局
**块0 (扇区1的第1块)**:学生ID号
例如: ...
dji Manifold2 C++开发
dji Manifold2 C++下载疆官方的onboard-sdk的原始工程项目,并进入示例代码的目录:,使用如下命令将示例代码编译为示例程序:
123mkdir build && cd buildcmake ..` 或 `cmake .. -DADVANCED_SENSING=ON#(使用视觉功能)make
执行示例程序1. 复制配置文件将配置文件UserConfig.txt拷贝到bin文件中:
1cp ../sample/platform/linux/common/UserConfig.txt bin/
2. 输入程序运行命令(如下以运行flight control 示例代码为例)1./djiosdk-flightcontrol-sample UserConfig.txt UserConfig.txt
Cmake的使用在文件的根目录下有一个CMakeLists.txt文件:
12345678910111213141516171819202122232425262728cmake_minimum_required(VERSION 2.8)project(on ...
dji妙算2装python3.8
去官网下载Python-3.8.1.tar.xzwget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz
如果下载失败 1.将服务器DNS改成 8.8.8.8 2.将源改为清华或者豆瓣源
解压并进入解压文件的目录:12tar -xvJf Python-3.8.1.tar.xzcd Python-3.8.1/
安装依赖(非必要,但建议都装一下,不装可能会在step5 或者 装完跑代码的时候报错)
执行下列命令安装依赖过程中,如有提示,一律输入 y 。
12sudo apt-get install python-dev libffi-dev libssl-devsudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
执行 ...