自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 二极管基础知识

2022-02-26 14:57:20 339

原创 union和struct的区别

union只配置一个空间来放置共用体中内存最大的数据,而结构体则给其中每个变量内存空间。union常用来压缩数据空间,其中两个变量不能同时使用时用union。

2022-02-14 15:43:30 311

原创 C语言宏函数妙用——1

#include <stdio.h># define serialDebug(fmt, args ...) do{printf("func(%s)&line(%d)-----" fmt "\n", __FUNCTION__, __LINE__, ## args);}while(0); /*do {} while(0)的使用时为了保证宏定义的使用者能无编译错误的用宏*/

2022-02-08 16:32:46 406

原创 MSP432(Keil5)——10.通过匿名上位机看数据

使用过匿名上位机的朋友应该知道,这个软件还是做的十分不错的,加之其可以通过串口将数据发送到电脑上,完成波形的显示,十分有效。本次例程将完成在MSP432上与上位机通讯协议的编写。在这个实例中我只完成了03号命令的发送,具体拓展可以自己修改。如果对匿名上位机不了解的话,建议先学习B站课程:传送门,一下就学会了,以后学其他的协议也很快。ano.c#include "ano.h"unsigned char DataToSend[100]; //发送数组缓冲区void ANO_Send0.

2021-09-01 23:15:18 1031 1

原创 MSP432(Keil5)——9.ADC驱动

本次例程驱动了板载的ADC来读取一个模拟的角度传感器,大家可以在ADC读取中断里面换成其他的计算,具体引脚见程序代码。adc.c#include "adc.h"void ADC_Init(void){ /* Initializing ADC (MCLK/1/4) */ MAP_ADC14_enableModule(); MAP_ADC14_initModule(ADC_CLOCKSOURCE_MCLK, ADC_PREDIVIDER_1, ADC_DIVIDER_4, 0); .

2021-09-01 22:58:42 1439 7

原创 MSP432(Keil5)——8.oled驱动

今天给大家带来msp432的oled驱动,本次实验代码移植的中景园电子的优秀代码。使用的oled是7线spi方式的,熟悉oled的也可以自行修改成iic。oled.c////////////////////////////////////////////////////////////////////////////////////本程序只供学习使用,未经作者许可,不得用于其它任何用途//中景园电子//店铺地址:http://shop73023976.taobao.com/?spm=2013..

2021-08-31 23:29:19 2163

原创 MSP432(Keil5)——7.串口驱动

本次示例代码将串口A0-A3全部引出,并将中断服务函数预留好。具体波特率如何配置需要根据TI的官网来配,网址放在代码注释里面。uart.c#include "uart.h"/*this web site config baudrate:http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/index.html*///115200const eUSCI_UART_Co.

2021-08-31 23:22:54 1485

原创 MSP432(Keil5)——6.PWM驱动

本次实验在5个IO扣上产生了PWM波,频率计算方法已经放在了代码注释里面,请大家耐心食用。pwm.c#include "pwm.h"/* Timer_A PWM Configuration Parameter *//* fre(Hz) = clock / div / period *//* 48000000/20/48000= 50Hz*//* 通道一 */Timer_A_PWMConfig pwmConfig_c1 ={ TIMER_A_CLOCKSOURCE_S.

2021-08-31 23:10:33 1103 1

原创 MSP432(Keil5)——5.定时器驱动

此次实验初始化定时器,1ms进一次中断。实验现象:1s时间led闪烁一次。timer.c#include "timer.h"void TIMER_Init(void){ /* Configuring Timer32 to 48000000 (1s) of MCLK in periodic mode */ MAP_Timer32_initModule(TIMER32_0_BASE, TIMER32_PRESCALER_16, TIMER32_32BIT, TI.

2021-08-31 23:03:29 915

原创 MSP432(Keil5)——4.系统时钟频率修改及查看

本实验将给出系统时钟频率的查看方法,以及修改的方法。真正的想要了解这款单片机的时钟树还得自己去啃手册。如何修改系统时钟频率在system_msp4329401r.c文件中,在64~71行处,定义了一个宏,修改这个宏即可。查看系统时钟频率sys_fre.c#include "sys_fre.h"/*在此定义了一些时钟源频率变量,在main函数中声明并调用该函数查看频率*//*可通过调试查看*/extern uint32_t aclk, mclk, smclk, hsmclk, bclk;.

2021-08-31 00:27:46 3275

原创 MSP432(Keil5)——3.delay延时驱动

本次示例中的延时函数采用了系统内部的systick时钟,学习了正点原子的延时函数写法。如果你移植出来不是标准的延时,那么就是你的时钟频率设置的不对,我的是48MHz。delay.c#include "delay.h"static uint8_t fac_us=0; //初始化延时函数void Delay_Init(void){ fac_us = SystemCoreClock / 1000000; }//延时usvoid delay_us(uint32_t n.

2021-08-31 00:19:49 4261 3

原创 MSP432(Keil5)——2.按键及外部中断驱动

本次按键实验是采用了板载的两个按键分别对应的P1.1与P1.4口,具体迁移到其他IO口的外部中断请移步原理图。实验现象:按下按键会翻转板载LED灯状态。key.c#include "key.h"void Key_Init(void){ /* Configuring P1.1 as an input and enabling interrupts */ /*配置1.1口为上拉输入*/ MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_P.

2021-08-31 00:13:22 2007

原创 MSP432(Keil5)——1.LED驱动

hello大家好,好久不见,这是本次代码示例使用的开发板,也就是TI官方提供LaunchPad。所有的代码本人均已验证完成,不含任何隐患,这次分享旨在以最简洁快速方式提供给大家MSP432的基本驱动代码,供大家学习交流。led.c#include "led.h"//LED初始化void LED_Init(void){ /*初始化小红灯IO口为输出模式*/ MAP_GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN0); /*初始化RGB灯IO.

2021-08-30 23:59:24 1297 1

原创 巡线PID算法

相信很多电子专业的同学都做过循迹小车这个小玩意儿,而在我们刚刚接触巡线的时候都是用的两个循迹模块(如下图)左边的模块检测到黑线了就说明我车子的方向偏右了就需要往左转,同理,右边检测到黑线时我就需要往左转。这样就会形成一种这样的蛇形巡线效果这种巡线的方法虽然简单,但也十分具有局限性。只有在小车方向偏离程度很大时(也就是小车的一边的传感器碰到黑线时)才能进行方向的校正。而方向的校正就是让车子保持往一个方向的旋转(例如左边轮子往前,右边轮子往后,就达成顺时针旋转的效果),然后通过不同长度.

2021-04-26 18:14:52 14273 8

原创 陀螺仪3D上位机&&串口不能直接发送负数解决方法

由于接触陀螺仪比较长时间了,一直有一个念想,就是做一个自己的陀螺仪3D模型显示,功夫不负有心人,终于某个早晨在一个技术群里发现了有processing这个软件可以比较简单的实现(虽然之前也知道C#等这些传统意义上的上位机豪强可以实现,但总归有些生疏隔阂一般,再一个也是基于时间成本考虑)。于是乎花了一天的时间将这个3D模型做了出来,效果还不错,嘻嘻????~视频链接:https://www.bilibili.com/video/BV11y4y1m7t1在这期间遇到了一个问题,在学长的帮

2021-03-23 15:08:19 1590 3

原创 第二篇——Copter旋翼部分

Copter的基本构成飞控板 GPS模块 电池 地面站 遥控器 接收机有了上面的六大组件,就能够搭建一架全自动或半自动的旋翼系统。Copter主要特点高精度杂技:能够完成穿越机的大飞行动作 自稳和定高:姿态和高度稳定,只需要接收简单遥控器操作指令即可完成飞行 定点:借助GPS,气压计,加速度计使旋翼控制定在一点飞行 返航:一键返航,不用担心旋翼放生 接收命令飞行:在地面站地图上标定点,旋翼就会朝目标点飞去 自主任务:使用地面站完成多个自主任务,无需遥控器...

2021-03-23 15:01:31 984

原创 第一篇——APM飞控学习笔记

关于什么是APM?可能有很多玩航模或者是向我这样混迹于实验室的垃圾佬(bushi)看到过这个玩意--->>>从狭义上来说,这个就是APM开源飞控。APM又叫ArduPilot——automatic pilot,中文名字就是自动驾驶仪。它是全球著名的开源项目(既然是超级大的开源项目,就肯定能在GitHub找到它的页面apm在github的主页),应用十分广泛。从了解它开始,“哇!????”这个感叹就会一直陪伴着你,你会一点一点地被它惊艳到,颇有一种五岳归来不看山,黄山归.

2021-03-23 14:59:10 10706 1

原创 蓝牙进入AT模式

我出生在江河湿润,水汽氤氲的洞庭湖,我长到二十岁还不会游泳不通水性,我觉得是时候做出改变了。我要水文章????加强水性。这当然是开个玩笑,我在使用HC-05蓝牙模块传输数据的时候,一直进入不了AT模式设置参数,浪费了我小上午的时间,我要记下来,时常看看,警醒自己。大家可以散了,具体的还是要看每款蓝牙的手册。这里我要diss亚博智能,实验室买了它的小车上面带的蓝牙PIN配对码都不给,还剪掉可以进入AT模式的引脚,过分,这里仅代表我个人观点,产品质量还是可以。如果过不了审我就删了这段。...

2020-09-12 09:25:46 403 4

原创 Microzone遥控器简单说明与电调设置

问题背景我和小伙伴在制作双旋翼练手的过程中遇到不知道怎么用遥控器设置电调参数的问题,在一番查找资料之后我们成功解决,并就此记录,可供其他朋友一起学习、纠正、分享。(我们以前跟着学长做的时候好像可以用信号发生器产生一个方波信号来提供给电调以驱动无刷电机,但这次我们试了许久都没有成功,在这里也发出疑问,希望有经验的同学可以给出我们正解,也算是挖了个坑)遥控器使用Microzone遥控器实物图当然有了遥控器还不行,还要有配套的 接收机????,现在有图有真相然后来个表格描述我各个颜色方框代表的功能。

2020-09-12 09:08:57 12361 1

原创 STM32F407系统时钟配置不准确导致串口发送数据乱码、定时器定时不准问题

前言在用原子的F407探索者开发板时,由于是用的野火的工程模板,导致了一些串口发送乱码、定时器定时不准的问题。如果你也有类似的问题,这个或许可以帮到你。原因SYSCLK 系统时钟来源有三个方面:HSI,HSE 和 PLL。在我们实际应用中,因为对时钟速度要求都比较高我们才会选用 STM32F4 这种级别的处理器,所以一般情况下,都是采用 PLL 作为 SYSCLK时钟源,而系统时钟配置不正确就是PPL这里出了问题。先看一下主PPL在整个时钟树中间的位置。高速系统时钟一般由PPL_P提供,一般配

2020-08-17 16:35:26 6210 7

原创 快速排序算法——陀螺仪原始数据处理

在陀螺仪原始数据滤波时,需要用到排序算法去除最大最小值,首先想到的就是冒泡排序,但是由于冒泡排序时间复杂度高,所以就学习了一下更为高效的快速排序,在此记录,聊胜于无。关键点:1、找到基准元素对应的正确顺序位置2、以这个位置前后进行递归找到基准元素对应的正确顺序位置假设一个数组为[15,3,2,45,99],一般来说都以数组的第一个元素为基准元素 所以基准元素:val = 15;队尾指针:先从数组末尾开始往前搜索,大于等于基准元素的不管,继续往前,如果小于基准元素,就把这个值直接给到队首指针当前

2020-07-22 23:24:17 1285

原创 MPU6050姿态解算——Mahony互补滤波

引入DMP与互补滤波数据对比Long time no see,首先放一张图,黄色的是DMP获取的Pitch角数据,紫红色的是互补滤波解算的Pitch角数据(人为晃动陀螺仪增加了干扰)。DMP与互补滤波的优缺点分析DMP互补滤波不需要了解姿态解算知识,直接调用库函数,操作简单需要掌握一定的姿态解算知识解算速度慢,最大只能到200Hz速度快,而且随着单片机主频提高会更快真实性差真实性较好从上面的曲线图结合我实际的干扰,在我大范围晃动陀螺仪的时候,DMP的角度

2020-07-18 11:37:43 14226 60

原创 FreeRTOS学习(2)——任务创建与删除

任务基础知识FreeRTOS任务特性简单没有使用限制支持抢占支持优先级每个任务都拥有堆栈导致RAM内存使用量加大使用抢占必须考虑重入的问题(可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,所以它如果被中断的话,可能会出现问题,这类函数是不能运行在多任务环境下的)FreeRTOS任务

2020-05-25 14:37:06 610

原创 FreeRTOS学习(1)——FreeRTOS移植

为什么要让你的单片机裸奔?什么是FreeRTOS?首先看到两个概念:RTOS:实时操作系统,目前主流的嵌入式操作系统有:UCOS、FreeRTOS、LWIP、EMWIN、RT-Thread 等FreeRTOS:FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要也许在百度百科截取的这段解释不够接地气,通俗的解释就是更加有序的管理单片机的各个任务功能执行。为什么要

2020-05-24 21:59:17 1366

原创 stm32学习(4)——外部中断

中断是单片机的灵魂引入周末的下午小明正在家里安安静静的写作业,突然小明的妈妈买菜回来了,但是妈妈忘记了带钥匙,就敲门示意小明开门,小明听到妈妈敲门的信号,停止正在写的作业,做出开门的反应,让妈妈进门,然后又继续写作业。停止正在处理的事情转而处理另一件事,在处理完另一件事后又回来处理原来的事情,这在单片机中就是中断的概念。在各类单片机中都有这几类中断:串口中断定时器中断外部中断今天就来了解一下stm32中的外部中断:外部中断概述一、STM32的每个IO都可以作为外部中断输入二、STM

2020-05-23 21:11:07 1054

原创 数据结构与算法学习(1)——代码效率优化

作为一名电子信息工程专业的学生,我们学校是在专业选修开设了数据结构课,但是大家都没有选择这一门课,由于一个偶然的机会,在一个技术交流群里有大牛推荐了这个数据结构课,只要1块钱还是9.9块钱我不记得了,反正属于薅羊毛性质,既然买了就拿来督促一下自己,也提升一下自己的代码思想。复杂度复杂度是衡量代码运行效率的重要因素,它包括:时间复杂度(与代码的结构设计相关)空间复杂度(与数据结构的选择相关)复杂度是一个关于输入数据量 n 的函数。假设你的代码复杂度是 f(n),那么就用个大写字母 O 和括号,把 f

2020-05-23 13:47:46 376 1

原创 stm32学习(3)——NVIC中断优先级分组

相信大多数铁汁在学习stm32的时候都了解过51单片机的基本内容,对于51单片机来说,中断就那么几个:外部中断0定时器/计数器0中断外部中断1定时器/计数器1中断串口中断它们在51单片机中的优先级也是按自上而下的顺序,中断少且优先级明确,这就是大家了解的51单片机中断系统,又顺便复习了一波老知识。而在stm32f103系列芯片中有60个可屏蔽中断(可屏蔽中断简单来说就是可以由寄存器控制是否产生中断的中断,skr~),从《stm32中文参考手册》中可以看到有这么0-59号一共60个可屏蔽中断

2020-05-22 21:16:34 6124 1

原创 stm32学习(2)——时钟树

我家门前有两棵树,一棵是枣树,另一棵也是枣树。 ——鲁迅你是否总在感叹人生苦短光阴易逝,你是否有着青春的年纪却在路上被叫叔叔阿姨的无奈,你是否总觉得自己的时间海绵干涩无比挤不出水。如果是,那么你就需要加强时间管理,做时间永远的主人。了解stm32时钟的心,从这里开始。今天就来聊一聊掌握时间黑魔法的时钟树。时钟框图如果你看到这幅图有一种想离开页面的冲动,那么,那么,那么我只能求你继续看下去,卑微的我。看到这幅图的结构,是一个以黄色为背景,其中镶嵌有天空蓝、牛油果绿、雾朦胧灰

2020-05-21 20:32:16 767

原创 stm32学习(1)——GPIO

引脚说明基本结构工作方式相关寄存器**一、引脚说明(以正点原子精英版所用stm32f103zet6为例)**STM32F103ZET6:一共有7组IO口——GPIOA~GPIOG每组IO口有16个IO——PA0~PA15…PG0~PG15一共有7X16=112个IO口这是一个ZET6芯片IO口的数量位置分布,在不同的芯片IO口数量也不同**二、基本结构**先把这张图放在这里**三、工作方式**输入模式4种:输入浮空输入上拉输入下拉模拟输入输出模.

2020-05-20 09:58:03 1706

原创 IIC模拟通信实例(基于51单片机)

在本文中,主要描述了IIC通信协议与读取24c02的具体实例,并引入LCD1602显示器将读写的数据显示出来,更加直观的感受IIC读写数据的过程,如果对LCD1602液晶显示器方面还存在疑惑的话,可以进入传送门,在这篇博客中有详细解释。目录IIC...

2020-05-04 23:45:29 4301 2

原创 LCD1602驱动编写(基于51单片机)

从前村里的狗蛋捡到了阿拉丁神灯,狗蛋向神灯许了三个愿望。第一个愿望狗蛋说“我想学会如何驱动LCD1602”,神灯说:“so easy”,然后把这篇博客的链接发给了他。神灯问他还有两个愿望是什么,狗蛋说:“希望神灯给这篇博客点赞加评论”,神灯看了文章但是忘记点赞,三天后,神灯猝。目录1. LCD1602基本介绍2. LCD1602原理图3. 引脚说明4. 基本时序操作5. 状态字说明6...

2020-05-02 09:34:50 3481 2

原创 十分详细的数码管电子时钟(基于51单片机)

数码管由于内部由多段LED灯构成,也被称为多段式LED数码管。从数码管里面包含的LED个数来分,可以分为七段式、八段式、十四段式等。七段式数码管:八段式数码管(比七段式右下角多了一个小点):十四段式数码管:从数码管电极性质来分可分为共阴数码管(CC)和共阳数码管(AC)。共阴数码管内部所有的LED灯段的负极接在了一起,只需要给相应位高电平即可点亮一段。共阳数码管只需给低电平即可...

2020-05-01 10:01:27 23647 21

原创 串口不够别着急,软件模拟来帮你(基于51单片机)

在单片机实际开发的过程中,可能会出现串口不够用的情形。如果你需要更多的串口,又无奈于手头没有资源更丰富的单片机,那么,软件模拟串口通信也许可以帮到你。软件模拟串口通信的主要思想是通过定时器来定时产生相应的波特率。#include<reg52.h>sbit PIN_RXD = P3^0;sbit PIN_TXD = P3^1;bit RxdEnd = 0; ...

2020-04-29 10:59:18 1404 3

原创 简单易学的几大经典滤波算法(含代码及仿真)

一、限幅滤波法设定两次采样允许的最大偏差为A如果(本次值-上次值)的绝对值大于A,则本次值无效,用上次值代替本次值如果(本次值-上次值)的绝对值大于A,则本次值有效,采用本次值import numpy as np from matplotlib import pyplot as pltplt.rcParams['font.sans-serif']=['SimHei']...

2020-04-22 13:52:27 3758 2

原创 卡尔曼滤波学习及python仿真

在这里我就不介绍卡尔曼的数学推算了,网上的数学推导一抓一大把,如果想了解推导过程的小伙伴可以去大佬的博客。如果你是想直接简单运用卡尔曼滤波来处理mpu6050的数据,或者是处理ADC的数据,那么我希望这篇笔记可以帮助到你。卡尔曼滤波(Kalman filtering)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。卡尔曼滤波简介:你可能经常听学长学姐提起这个...

2020-04-20 17:46:34 1715

原创 更改MPU6050的IIC端口

开门见山,我所用的例程是正点原子F103的mpu6050教程代码。它所读取的mpu6050的方式是软件模拟IIC通信,可以配置任意的io口进行读取陀螺仪数据。更改IIC的IO口需要改两个地方:1.是在mpuiic.c里面的MPU_IIC_Init()函数里面在这里修改SCL与SDA的IO口即可。2.在mpuiic.h里面修改IO口方向设置与IO口操作函数先说IO口操作函数的修改,这...

2020-03-16 10:42:23 2227 9

Filter.ipynb

这个是我学习一些简单滤波算法之后在python中模拟进行的仿真,用图像来体现滤波效果,更加容易学习,十分容易接收

2020-04-22

空空如也

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

TA关注的人

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