自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 资源 (6)
  • 收藏
  • 关注

原创 ZAP日志框架&lumberjack日志归档库的分析使用

本次我们从官方例程的角度出发,来分析学习如何让zap日志框架动起来1、加糖版2、正常高性能版官方例程中总共列举出了两种打log的方法,和,这两种的区别是logger的性能优于sugar,但是sugar提供了格式化输出,而logger不支持,所以根据自己的需要,来选择两种不同的log方式。通过zap.newxxx的方法来生成一个logger对象,我们在编程时可以看到,zap总共提供了三种默认的模式和一种自定义模式四种模式对比分析1&2&3因为1、2、3只有配置不同,其他都相同,所以合并分析在源

2022-07-07 21:17:44 1365

原创 力扣算法——第16题——go语言

package mainimport ( "fmt" "math" "sort")func main() { var slice1 = make([]int, 0, 5) fmt.Println("please input an array: ") for i := 1; true; i++ { var inputNum int fmt.Printf("No.%d : ", i) _, err := fmt.Scanf("%d", &inputNum) if n

2021-12-21 10:45:48 438

原创 搜狗workflow框架例程分析——05

文章目录例程说明运行结果例程说明本次创建一个HTTP代理服务器并运行,通过curl命令借助代理服务器访问网页运行结果通过代理服务器访问时,会在命令框打印出url,status,bodylength使用curl命令,通过代理服务器127.1:8000访问ww.baidu.com时打印出response的HTTP数据报中的头部信息...

2021-12-19 13:45:07 1177

原创 力扣算法——第15题——go语言

package mainimport ( "fmt" "sort")func main() { var slice1 = make([]int, 0, 5) fmt.Println("please input the No.1 array: ") for i := 1; true; i++ { var inputNum int fmt.Printf("No.%d : ", i) _, err := fmt.Scanf("%d", &inputNum) if ni

2021-12-15 00:13:25 256

原创 搜狗workflow框架例程分析——04

文章目录测试结果代码分析mian函数process函数测试结果运行例程04,端口设置为8000。分别是用浏览器和curl命令访问代码分析mian函数在main函数中没有什么特别的地方,唯一需要介绍的地方就是这里创建了一个HTTP server的处理函数。这里的process函数类似于之前的callback函数,参数类型完全一样。process函数这个函数中主要包含了获取request的http数据报头部信息编辑response数据报并返回这里有一个新操作是append_o

2021-12-14 20:11:07 581

原创 力扣算法——第11题——go语言

func maxArea(height []int) int { indexLeft, indexRight := 0, len(height) - 1 var ans int = 0 for ; indexLeft < indexRight; { area := ((indexRight - indexLeft) * min(height[indexLeft], height[indexRight])) ans = max(ans, area)

2021-12-13 22:02:44 260

原创 力扣算法——第4题——go语言

package mainimport "fmt"func main() { var slice1 = make([]int, 0, 5) var slice2 = make([]int, 0, 5) fmt.Println("please input the No.1 array: ") for i := 1; true; i++ { var inputNum int fmt.Printf("No.%d : ", i) _, err := fmt.Scanf("%d", &a

2021-12-13 22:01:36 508

原创 搜狗workflow框架例程分析——03

文章目录测试说明测试结果代码分析main函数http_callback函数测试说明本次例程在ubuntu上运行,redis服务器安装在本机的windows系统下,运行例程00作为访问对象。测试结果没有运行例程03之前在redis的数据库运行例程03之后可以看到数据库中已经增加了关于本地端口8888的记录。代码分析在例程中,主要关注三个callback函数(series_callback, http_callback, redis_callback)和一个lamda函数main函数

2021-12-11 16:26:51 1328

原创 力扣算法——第一题两数和——go语言

package mainimport "fmt"func twosum(arr []int, tar int) []int { arrayMap := map[int]int{} for i, val := range arr { j, valInMap := arrayMap[tar - val] if valInMap { return []int{j,i} } arrayMap[val] = i } return nil}func printSlice(x

2021-12-09 10:11:59 216 1

原创 搜狗workflow框架例程分析——02

文章目录测试结果代码分析测试结果任务:实现一次redis写入与读出:redis_cli,在主机(windows 10)运行redis-server,在虚拟机(ubuntu NAT模式)中运行例程02并向主机数据库传送key和val首先在本地读取数据库观察只含有一个key:mykey,后运行例程02,在观察数据库中多了一条记录。由于虚拟机使用NAT模式,所以本次测试可以看做是远程访问。代码分析访问redis数据库的操作与例程01抓取http操作有些类似,依旧是分为两个部分,1、封装redis命

2021-12-08 15:25:19 732

原创 搜狗workflow框架例程分析——01

文章目录一、测试结果二、代码分析1、获取,创建并启动http任务2、抓取response并分析,成功则打印网页内容(1)访问失败(2)访问成功例程01,通过wget方式抓取输入的网页内容一、测试结果我们使用例程01对例程00进行抓取测试上图测试总共分为三次,第一次为http服务关闭状态,第二次为开启状态,第三次为电脑断网状态访问www.baidu.com二、代码分析例程01的代码主要分为两个部分,1、获取URL,创建并启动http任务,2、抓取response并分析,成功则打印网页内容。

2021-12-07 15:54:25 1715

原创 搜狗workflow异步调度框架例程分析——00

文章目录workflow例程:00一、创建http服务1、WFHttpServer类2、WFHttpTask类二、开启/关闭服务三、测试四、总结关于搜狗的workflow不在赘述,可以查看知乎介绍https://zhuanlan.zhihu.com/p/165638263B站也有视频。从本篇开始根据workflow提供的源码例程为切入点开始分析如何使用workflow搭建异步调度的C++后端代码workflow例程:00这个代码很简单,简单到官方都没有给出关于他的任何文档,连编号都是00。但是对

2021-12-05 23:34:04 1659

原创 涂鸦智能CBU二次开发指导手册入门版——智能灯

涂鸦智能灯例程是一个非常好的源码,其中包括了GPIO操作完成的引脚控制,模拟IIC,输出PWM,tuyaOS日志控制模块等,所以如果可以拿下智能灯例程,那么关于模块IIC通讯,电机控制等方面的设计要求就可以完成。开发指导书已上传至账号资源,点击此处跳转......

2021-09-09 08:34:55 2644

原创 涂鸦智能CBU二次开发指导手册入门版——智能插座

基础版介绍了手机端-云端-终端的配置方法、相互关系、以及控制原理,对涂鸦智能硬件设备有了初步的了解。本书为涂鸦 SDK 开发入门指导,通过修改 demo 代码实现使用手机端控制终端 LED 的功能。包含了 LED 硬件注册及初始化、上传 LED状态,并可以在 APP 上控制 LED 的开关功能,此次 LED 为后期电机MOT 的 LED,所以程序中均使用 mot_led 标识符。本书以 elp_1plug为例进行编写。在智能插座的 demo 中有 relay_led 的实现和控制代码,二次开

2021-08-12 11:14:45 1703 1

原创 涂鸦智能模块二次开发--基础

本次主要以CBU模块为例,使用例程完成手机端–云端–终端的连接,涂鸦 SDK 开发最基础指导,包含了开发环境、以及手机端-云端-终端的配置工作,可以让开发者最快时间完成 demo 的测试工作,demo 例程共有 template、elp_1plug、light_pwm 三个,本书以elp_1plug 为例进行编写。按开发时间顺序编成本书,开发者可根据本书按部就班即可完成。利用涂鸦官方 demo 实现了在手机 APP 上控制智能插座的开关。下载链接......

2021-08-12 11:14:08 2651

原创 涂鸦 物联网套件开发编译环境搭建

根据官方要求,涂鸦代码的编译条件可以在windows支持的Cygwin、Mingw、WSL2等环境下编译,或者在ubuntu下直接通过命令符sh build_app.sh apps/tuya_demo_template tuya_demo_template 1.0.0编译。我选择windows+ubuntu开发,即windows系统+虚拟机这个是官方给出的环境搭建方法:https://github.com/tuya/tuya-iotos-embeded-sdk-wifi-ble-bk7231n

2021-05-12 10:50:07 1193 1

原创 关于二进制左移、右移问题

昨天做点灯的程序突然出现了一个bug,LED为低电平点亮,我本想做一个灯顺着往下亮,但是每次都发现亮灯的数量是递增的,和我设想的不一样,我使用的是0xfe<<1的方法。如果我改成 ~(0x01<<1)的方法就是正确的。为什么会出现这种现象我觉得可能和二进制的左移右移有关。后来通过C语言程序验证经过两种方法验证后,可以看到如果二进制为 0000 0001,那么每次左移的结果就是 0000 0010,0000 0100……但是如果是 1111 1110,那么左移的结果就是

2021-04-15 09:24:27 4572 1

原创 Git 版本控制软件使用基本方法

1、前言在商用系统中,通常要进行软件的版本控制,本次我以git软件为例,学习如何使用git软件对工程文件进行版本控制。版本控制的意思是:可以查看、上传每次程序的修改和升级,并且实现多人同时对一个软件进行更新。2、实践开始1、git init在任何一个版本开始的开端,都是先初始化git。通过向命令框输入 git init 指令,操作完成后会创建.git文件,这里面储存的就是git需要的所有东西。2、关于用户名和邮箱配置全体文件git的用户名和邮箱git config --global us

2021-04-07 21:29:26 651

原创 STM32 四轴无人机设计——读取MPU6050数据并上传匿名上位机

1、前言在之前的stm32基础篇中,已经实现了软模拟IIC,调用MPU的DMP库输出四元数转化为欧拉角,以及编写匿名上位机的通讯协议。软模拟IICMPU6050——DMP库使用匿名上位机通讯协议分析直接点击可以看。从程序模块化设计的角度,现在每一个模块已经测试完毕,现在需要将各个模块组合在一起,使数据通用、逻辑顺序正确即可。2、设计思路在四旋翼整体设计中分析到,姿态数据的读取储存非常重要,所以安排在1KHz的程序里面。并且这次我们需要引入一个新的全局变量——report,控制是否将飞控

2021-02-20 17:48:58 4409 1

原创 STM32 四轴无人机设计——PPM控制无人机动作

1、前言前面两次我们成功的将PPM信号的读取、储存和油门处理完成了,这次我们要开始真正的控制无人机,首先我们要了解无人机前后,左右,旋转,升降的原理。2、动作原理引用:https://blog.youkuaiyun.com/weixin_35703797/article/details/52072105我觉得他的博客讲的非常清晰,大家可以阅读以下。我直接使用博主的结论:*1号电机(前左)= 悬停油门 + 右倾的量 - 前飞的量 - 旋转的量*2号电机(前右)= 悬停油门 - 右倾的量 - 前飞的量 +

2021-02-19 20:24:29 3862 3

原创 STM32 四轴无人机的设计——处理遥控器PPM信号

1、前言上一次我们已经成功接收并储存了从遥控器发送的PPM信号,但是你们知道遥控器的哪个通道对应PPM信号的哪一帧吗?没关系,我知道,哈哈,我自己测量了一下,将对应通道的数据帧位置统计了出来。2、PPM数据帧分析图1是我根据富斯的官方手册总结出来的,图二是我通过输入捕获,将每一个操作的数据帧测量出来。3、数据帧分析从上图中可以看出ch1对应的并不是data【0】,所以我们要对接收到的PPM信号进行处理,按照ch1、ch2、ch3…的顺序排列4、程序设计这个是我最开始接收到PPM信号,为了验

2021-02-19 20:06:07 3519 8

原创 STM32 四轴无人机设计——遥控器PPM信号

1、前言由于时间原因,我使用的遥控器是直接买的成品,富斯I6x+IA6B接收机,据说是一代神控,富斯的遥控器总共有ibus模式、sbus模式、PPM模式。我使用的是PPM模式。2、什么是PPMPPM信号其实就是很多个PWM信号综合到一起,形成一路PWM信号的形式叫做PPM信号。PPM信号一帧数据分为低电平(0.5ms)+高电平(0.5ms-1.5ms),高电平长度与PWM占空比成正比。因为一帧信号最多要2ms,信号周期为20ms,所以理论一次PPM信号可以发送10帧数据,但是由于要确定帧头信号,所

2021-02-19 19:49:04 9086 7

原创 STM32 四轴无人机的设计——代码整体设计

1、前言从现在开始我们要接触一个完整的工程,所以我们要对整个工程进行分析,将硬件设计、软件设计模块化,一个模块一个模块的完成,最后将各个模块融合在一起,就是我们整个工程。模块化设计是现在代码开发非常重要的思想,上一篇我已经完成了距离检测和报警模块,后续将补充遥控、陀螺仪、上位机、低通滤波、PID等代码设计,因为这些代码我已经在stm32基础篇中逐个完成,现在我要做的是将之前的各个代码进行整理合并,再加入PID对程序整体控制,即可完成四旋翼的设计。2、无人机设计整体思路因为stm32是单线程cpu,所以

2021-02-19 19:27:40 12498 5

原创 STM32 四轴无人机的设计——基于HCSR04超声波模块的距离检测与警报设计

1、系列总述从现在开始将会进入四轴无人机的制作,我是第一次制作四旋翼,从前没有接触过这个方面,手边的参考资料只有一本四轴的设计书和正点原子F405飞控的源码,所以代码逻辑设计方面肯定有所欠缺,大家可以积极留言讨论,共同进步。进入正题,距离检测与报警,我的设想是将超声波测距模块安装在四旋翼的底部,虽然超声波精度不高,声波发射范围不可控,但是可以作为初学者,此模块可以完成定高,测距+报警功能已经满足了我的需求。2.设计思路依靠超声波模块测算空对地距离,在安全范围,无报警声,进入危险范围(我设定的<

2021-02-09 18:11:54 2737 1

原创 STM32 MPU6050与匿名上位机通讯(V2.6版)

1、简介在四轴的调试中,经常要使用地面站与飞控之间进行通讯,可以调试飞控中的数据,比如PID参数,零点漂移值,传感器数值微调等等,所以在飞控中会预先编写与上位机通讯的代码。本次我们使用匿名科创开发的四轴上位机V2.6版,实现从STM32发送陀螺仪原始数据,姿态角,PID参数到上位机。2、硬件连接(1)STM32与MPU6050(2)STM32的串口1与上位机3、通讯协议通讯代码都是基于通讯协议编写的,就好像对暗号一样,暗号正确才会进行数据传输。匿名上位机的通讯协议大体上都遵循0x88+FU

2021-02-07 20:48:11 10761 4

原创 STM32 使用DMP库处理MPU6050数据

1、实验分析MPU6050包含一个三轴陀螺仪,三轴加速度计,并且可以通过AUX_CL和AUX_DA再扩展一个磁力计,内部设有一个可扩展的数字运动处理器DMP,可以将欧拉角以四元数的形式输出。本次实验我们使用DMP库对MPU6050初始化并且通过DMP中的库函数读取加速度值和陀螺仪值显示在LCD上2、实验前准备使用DMP库需要在MPU官方下载固件并将下面六个导入工程并且在固件库中需要进行一定的设定。在inv_mpu.c文件中预留有调用文件的接口,需要我们提前设定一下首先#define MPU

2021-02-07 13:36:35 34844 35

原创 STM32 软件模拟IIC

1、IIC通讯过程SCL和SDA在空闲时候均为高电平。MCU接收到通讯命令后,首先广播从机地址(例:MPU6050地址为0x68,0x69)+读/写操作,从机收到后产生应答,随后开始SCL强制拉低,开始传送一字节数据①收到应答信号后,继续传送第二个字节……②收到非应答信号后,停止传输2、IIC通讯协议从图中可以看到IIC起始信号:SCL保持高电平,SDA从高电平跳变到低电平IIC结束信号:SCL保持高电平,SDA从低电平跳变到高电平开始和结束信号的SCL相同,SDA相反。IIC应答信

2021-02-05 17:22:19 14238 6

原创 STM32 ADC的使用

1、ADC是什么ADC全称Analog to Digital Converter:模拟数字转换器。拥有12位测量范围,可以通过STM32上GPIO端口的输入模式实现对外部传感器的测量,测量范围为0-3.3V(0-4096)2、ADC介绍1、ADC总共有以下寄存器(1) ADC状态寄存器/Status register ADC_SR(2)ADC控制寄存器1/Control registier 1 ADC_CR1(3)ADC控制寄存器2/Control register 2 ADC_CR2(4

2021-02-05 11:04:31 1496

原创 keil中常用快捷键

常用快捷键查找:Ctrl+F替换:Ctrl+H重做:Ctrl+Y撤销:Ctrl+Z全选:Ctrl+A复制选中内容:Ctrl+C粘贴选中内容:Ctrl+V剪切选中内容:Ctrl+X跳转到指定行:Ctrl+G保存文件:Ctrl+S选中行注释:Ctrl+选中行取消注释:Ctrl+/选中行的内容剪切:Ctrl+L向右缩进:Tab向左缩进:Shift+Tab移动光标选中:Shift+方向键移动整体选中:Ctrl+Shift+方向键编译:F7下载:F8keil中的快捷键可以自己设

2021-02-02 21:31:04 17146

原创 修改keil工程名字

删除所有编译文件打开工程目录1,删除;2,修改进入程序页面,点击魔法棒-》output-》Name of Executable点开品字标志修改工程名字保存后重新编译即可

2021-02-02 11:00:55 463

原创 新西达无刷电调驱动方法

哈哈

2021-01-31 16:35:53 6990 4

原创 STM32 TIM定时器的使用(5)——PWM驱动电调控制无刷电机

1、系列目录基本计时实验输入捕获实验(实验3的基础)电容按键检测实验 输出PWM实验PWM驱动无刷电机实验 (待补充)2、程序设计分析本次我们采用按键控制无刷电机的转速,实验本质是通过按键中断改变CCR的值,从而使PWM的占空比跟随按键改变,将PWM信号输入电调,最终实现对无刷电机的控制。3、实验用具正点原子STM32F1精英板新西达30A无刷电调A2212 1000KV无刷电机4、程序设计分析程序设计可以分为三大块:定时器、按键配置电机控制程序按键中断服务函数

2021-01-31 16:12:11 22472 12

原创 STM32 TIM定时器的使用(4)——PWM输出呼吸灯

1、系列目录基本计时实验输入捕获实验(实验3的基础)电容按键检测实验 输出PWM实验PWM驱动无刷电机实验 (待补充)2、原理(1)呼吸灯原理呼吸灯在手机上非常常见,现象就是灯光暗->亮->暗的过程,由现象可以倒推出原理:灯的电压小->大->小。但是这里为什么选PWM控制电压的大小呢?因为STM32中的TIM可以输出可控占空比的PWM波形,由PWM的占空比(高电平时间与整个周期的比值)来控制输出电压的大小。(2)PWM占空比改变原理在STM32的TIM寄存器

2021-01-29 17:28:04 4861 1

原创 STM32 部分重映射和完全重映射

STM32中拥有重映射功能,可以使硬件电路的设计更加简洁方便,在配置GPIO_PinRemapConfig()函数时,发现入口参数有两种重映射,分为部分重映射(Partial Remap)和完全重映射(Full Remap),那么这两个有什么区别呢?标题以TIM3为例根据图片可以看到,TIM3的部分重映射和完全重映射对应的引脚是不同的,所以在配置选择部分重映射和完全重映射的时候要考虑一下。重映射引脚分配图在哪这一部分其实并不在STM32的数据手册中,而在STM32的官方手册的8.3节,里面有所有功

2021-01-28 17:16:22 7531

原创 STM32 TIM定时器的使用(3)——电容按键检测

1、系列目录基本计时实验输入捕获实验(实验3的基础)电容按键检测实验 (待补充)输出PWM实验(待补充)PWM驱动无刷电机实验 (待补充)2、电容按键检测原理原理其实非常简单,通过TIM定时器的输入捕获功能判断电容的充电时间(没有触摸的充电时间短,有触摸的充电时间长)经过对比来确定是否有手指触碰。图片来源:零死角玩转STM32(库函数版)刘火良由上面两个图片可以看出,没有手指触摸时电容为Cx,有手指触摸时电容为Cx+Cs根据电容充电时间公式:Vc=V0*(1-e(-t/RC))

2021-01-27 17:13:04 2265 2

原创 正点原子惯用手法——变量寄存器法

如果是跟随正点原子学习STM32的同学会发现,原子的代码里面很喜欢设置一个状态标志变量。例如串口实验中的USART_RX_STA变量、定时器中的TIM5CH1_CAPTURE_STA变量,都是将一些重要数据保存在自定义的变量里面,这些变量可以看作是用户自定义的标志变量寄存器。那么下面分析一下这些“寄存器”到底是什么意思、该如何使用。1、下面以串口实验为例串口实验中定义 u16 USART_RX_STA =0逻辑图分析:函数本体:void USART1_IRQHandler(void)

2021-01-22 16:17:23 655

原创 STM32 TIM定时器的使用(2)——输入捕获

输入捕获实验是电容按键检测实验的前提所以需要先学习用TIM实现输入捕获1、系列目录基本计时实验输入捕获实验电容按键检测实验 (待补充)输出PWM实验(待补充)PWM驱动无刷电机实验 (待补充)2 、输入捕获原理定时器都有四个通道,我们需要将使用其中一个通道与开发板的按键相同,例如正点原子F1精英板的KEY_UP按键和TIM5_CH1为共用IO(PA0),所以我们只需要开启TIM5的捕获功能即可计时按键的高低电平变化。所以要使用到TIM_TimeBaseInitTypeDef和TIM_

2021-01-22 14:52:42 5353

原创 STM32 TIM定时器的使用(1)——定时

1、定时器简介STM32中,定时器的应用非常广泛,涉及计时、信号检测、电机控制等等,并且定时器章节的介绍在STM32F1的手册里面也占据了大量的篇幅,足以看出定时器的重要性。我将会做三个实验来学习TIM定时器的使用:(1)基本定时实验(2)电容按键检测实验(3)PWM驱动无刷电机实验2、模式简述根据官方手册可以看到,TIM的模式有很多:计数器模式:计时模式输入捕获模式:捕获输入的信号电平,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。PWM输入模式:输入捕获的一个特例。输出比较

2021-01-20 14:49:58 4237

原创 STM32 EXTI外部中断及NVIC的抢占优先级和响应优先级解释

1、中断类型从之前的串口实验可以看出,STM32总共分为内部中断和外部中断,内部和外部的配置差别不是很大,外部中断只是多了一步,需要通过GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)函数(在stm32f10x_gpio.h里面)将外部中断源挂载到中断线上即可。2、外部中断配置过程1、开时钟(必须开启复用时钟)2、初始化用到的GPIO口3、将使用到的GPIO口挂载到中断线上 GPIO_EXTILineCon

2021-01-18 21:43:15 3950

原创 STM32F1系列系统结构和外设挂载

2021-01-16 16:58:47 387

涂鸦智能CBU二次开发指导手册基础版.pdf

涂鸦智能CBU二次开发指导手册基础版.pdf

2022-07-07

涂鸦智能CBU二次开发指导手册入门版——智能灯v1.2.pdf

涂鸦智能CBU二次开发指导手册入门版——智能灯v1.2.pdf

2022-07-07

涂鸦智能CBU二次开发指导手册入门版——智能插座.pdf

涂鸦智能CBU二次开发指导手册入门版——智能插座.pdf

2022-07-07

【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.6.pdf

【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.6.pdf

2021-05-12

匿名上位机v2.6通讯协议.docx

匿名上位机v2.6.docx

2021-02-07

STM32参考手册 中文 .pdf

STM32参考手册 中文 .pdf

2021-01-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除