自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 Linux学习笔记9-Linux驱动【1】

Linux中一切都是文件,驱动加载成功后会在/dev生成一个相应的文件,例如/dev/DCmotor,就是直流电机的文件。Linux驱动有两种运行方式,一是将驱动编译进Linux Kernel里面,Kernel启动后会自动运行该驱动,二是将驱动编译成模块(几个函数实现打开设备,关闭设备,向设备写数据实现操作和读取设备状态等功能。写了Linux驱动后需要用应用(App)来操作内核,App属于用户态,和内核是隔绝开的。这几个函数都写进去,如果要实现具体功能,则编写相应代码,否则只需要。),用方法二比较多。

2024-01-05 16:20:07 476

原创 Linux学习笔记8-Uboot移植-网络设置和其他坑的解决

解决虚拟机和主机的网络问题

2023-12-23 16:46:58 1220

原创 Linux学习笔记7-SPI的应用和ICM-26068

即这个芯片包含了一个3轴的陀螺仪和3轴的加速度计,它支持I2C(最快400KHz)和SPI(最快8MHz)两种通信方式,内部还包含一个温度传感器(测量的是芯片内部的温度),陀螺仪和加速度计的测量范围都可通过寄存器来设置。,陀螺仪的单位是LBS/(°/s),加速度仪的单位是LBS/g,描述的都是如何把传感器输出的数字量转换为实际的角速度数值或加速度值。由于datasheet中我们需要的几个值-X/Y/Z的加速度值和陀螺仪值还有温度值,所在的寄存器是连续的从。

2023-12-06 15:36:37 1076

原创 Linux学习笔记7-IIC的应用和AP3216C

的学习,因为以后的项目中会用到这些通信方式,而且正点原子的开发板里面也有用I2C和SPI通信的传感器来做实例,分别是一个距离传感器和六轴陀螺仪,这样就可以很好的通过实例来学习了。,其实就是配置i2c_transfer结构体的各个参数,这个函数的参数是设备地址、要写入的寄存器、写入的数据,返回值可以扩展,可以是0-4,对应未写入(0),I2C1。I.MX6UL有4路I2C,正点原子写的I2C驱动包含了一系列的函数,这些函数其实就是对I2C相关的寄存器做一些置1或者0的操作,所以我们可以学习下常用的对寄存器。

2023-12-04 11:40:30 491

原创 Linux学习笔记6-串口应用

要注意,这个是直接打在屏幕上,而我们现在是要把可执行文件烧写到开发板上,通过开发板的串口和PC连接后发送和接收数据,不是一个层面的事情。到现在为止都是在开发板上运行的裸机程序,相当于之前学习STM32单片机时走过的路,还没有真正进入到核心的驱动开发部分,但这都是基础,所以慢慢来不着急。I.MX6UL的串口操作大同小异,和之前的GPIO类似,也是需要第三方的编写函数来操作各个串口相关的寄存器来达到想要的功能。文件夹,再使用正点原子写好的相关驱动,直接放到工程文件夹里,就可以使用串口进行数据的读写了。

2023-11-27 20:53:05 554

原创 Linux学习笔记5-GPIO(3)

使用正点原子推荐的SD卡烧写方式,插入到开发板上从SD卡启动,程序启动后LED0闪灭,按KEY0后蜂鸣器会响,再按一下会停,达到了我需要的功能,测试成功。的编写上,而且工程的结构和以后要做的大型项目也差不多,都是外设单独写源文件,所以正好也可以看看实际工程上是怎么利用Makefile来进行编译和链接的。在用于不同工程时,只需要修改TARGET的值,和头文件、源文件文件夹,其他无需修改,就可以应用了,非常方便,所以可以把这个Makefile当作万金油。复用的,所以可以利用上节定义的。函数的定义,这里不赘述。

2023-11-21 16:42:30 256

原创 Linux学习笔记4-GPIO(2)

作为总结,我们可以看到I.MX6UL的GPIO使用远远比STM32不便,首先是没有更方便的库函数,需要去操作和了解寄存器,其次是IO口的复用太多,要深入了解每个复用,没有图形化的界面(怀念CubeMX)来简单操作。例如CCM_CCGR2寄存器的27-26位,对应的是GPIO3的时钟,如果要使能,将这两个位置1,可以使用。I.MX6U和STM32是类似的,每个外设的时钟都可以独立使能或禁止,好了,基本上GPIO的操作就是这些了,STM32的那4个步骤也完成了。需要使能GPIO的时钟时,需要设置。

2023-11-13 20:41:04 244

原创 Linux学习笔记3-GPIO(1)

答案是有的,NXP为这款主芯片开发了相应的库函数,可以在NXP的官网上下载SDK,有WIN版和LINUX版两种供选择,下载完之后安装,在安装文件夹下找到。以上的学习针对的都是IO口的复用和相关参数设置,但并没有涉及到GPIO的属性,例如怎么设置输入输出,怎么设置高低电平值等等,这一块是怎么设置的呢?(XX代表的是IO的号码),这是个32位寄存器,查询IMX6UL参考手册,可以看到这个寄存器的每位定义,它只有低17位有效,具体来看。,把这几个头文件复制到自己的工程文件夹里,就可以调用相关的库函数了。

2023-11-13 11:51:12 181

原创 Linux学习笔记2-Makefile

则进入gdb调试页面,使用非常多的调试语句,例如断点、逐行执行、打印某个变量的值,说白了就是IDE中提供的那些调试功能在命令行中实现,讲真还真不方便,对于我这种习惯IDE的人来说还是用VSCode提供的调试功能更现实。但如果工程文件太多(成千上万),或者编译完之后有少数几个源文件修改了,要重新编译的时候是不是得把没有修改的文件包括在一起再来一次呢?开发的多个编程语言的编译器,包含C,C++,Fortran,Objective-C等,也包含了这些语言的库。一下,可以发现只会重新编译更改的源文件,节省了时间。

2023-11-03 17:37:14 138

原创 Linux学习笔记1-入门

之前的基于单片机的闭环控制步进电机项目其实已经完成了,但很多时间都花在调试和生产上,实在没时间去做总结笔记,现在又开始做新项目了,从单片机到了Linux,想用这个平台来督促自己继续学习,所以新开一章。之前的单片机项目应该还是会补全的。

2023-10-31 13:52:44 197

原创 STM32自学笔记17-步进电机驱动项目-磁编码器的正常使用

在校准过程中,可以通过采集一系列已知角度位置的数据点,并拟合出角度与编码器数据之间的关系。通过拟合,可以建立编码器输出数据与实际相位角之间的非线性转换公式,从而实现更准确的角度测量。代码是这样实现的,在步进电机旋转的每一步都计算下一步和这一步的传感器读取数值的差,如果这个差值和预期不一致,则认为发生了阶跃,同时把阶跃差值确定。在实际使用时,当有外部事件要求(例如实体按键,或者用户界面按钮),会进入中断回调函数。可以看到,进中断时的操作是走一个流程,把每个状态都走一遍,并把采集的数据记录到。

2023-07-21 16:51:56 1838 10

原创 STM32自学笔记16-步进电机驱动项目-磁编码器的校准

步进电机的旋转是360°一圈,磁编码器的取值也是从小到大一圈的值,所以两个点取值有可能出现的情况是:第一个点是最大值,转了一个小角度后这个值会出现跳变到最小值附近,但两个点的平均值绝对不是真实的平均值,需要进行调整。具体而言,校准的目的是。再来考虑步进电机走的步数问题,一般步进电机一圈的步数是200,即每一步走1.8°,所以也要保证算出来的步数在循环周期(即200)之内,可以简单的用。接下去进行步进电机相位角和磁编码器数据的拟合,会在下一节学习,还有最为关键的:正常工作时的编码器驱动回调函数的编写。

2023-07-13 22:15:51 3813 1

原创 STM32自学笔记14-步进电机驱动项目-TB67H450驱动

目前的项目是一种2相4线步进电机的闭环驱动电路,使用的电机驱动芯片是。这一节是步进电机的驱动芯片驱动研究。

2023-07-08 19:57:18 3819 3

原创 STM32自学笔记30-操作系统的入门

里面的代码非常少,while(1)循环不需要任何语句项目就跑起来了,这三个任务都独立运行,至于系统怎么调用,我不太关心,但是关于堆栈、task、queue的知识,我还是要继续学习。,选V2也可以,我的开发板是STM32F1的,V1完全够用了。是比较主流针对STM32的片上操作系统,学习资源较多,我也选取了FreeRTOS作为学习对象。其中第一个是FreeRTOS的初始化,就是我们在CubeMX里面的设置,另一个是os核心,是。里集成了FreeRTOS,而且正如它的名字Free,是完全免费并且开源的。

2023-06-29 14:23:29 751

原创 STM32自学笔记15-步进电机驱动项目-磁编码器MT6816驱动

基于STM32F1的MT6816驱动,包括完整的注释

2022-10-17 17:05:27 6384 8

原创 STM32自学笔记13-CLion IDE的使用

CLion编译STM32工程

2022-09-02 19:26:21 804

原创 STM32自学笔记-12-和迪文屏的联用

单片机和串口屏(迪文屏)的联合使用

2022-08-05 13:14:02 2246 7

原创 STM32自学笔记-11-RTC3-掉电后日期清零的解决

F103单片机掉电后日期清零问题

2022-06-18 22:40:51 2423 1

原创 STM32自学笔记-10-RTC2-掉电后时间回到初始值

STM32在掉电后RTC时间会回到初始值的解决

2022-06-13 18:06:21 2147

原创 STM32自学笔记-9-RTC1

我现在做的一个项目中需要单片机连接的屏幕可以显示时间,这时候RTC的重要性就体现出来了。STM32的RTC(Real Time Clock,实时时钟)是一个独立的定时器,在相应软件配置下,可提供时钟日历的功能,在断电情况下RTC仍可以独立运行。只要芯片的备用电源(一般是一块纽扣电池)一直供电,RTC上的时间会一直走。.........

2022-06-12 21:40:20 399

原创 STM32自学笔记-8-红外遥控

开发板上有个红外接收器,是和F103的PB9相连,也配了一个遥控器,来学习红外遥控的原理,并且实际操作一下。HS0038是一款红外接收头,当收到遥控器发过来的信号后,通过REMOTE_IN传输到PB9口,我们做一个输入捕获,把波形还原,即可解码遥控器的信号了,然后用串口将遥控器对应信号的按键信息打印出来。原理如此,下面实操。...

2022-05-05 18:15:55 5632

原创 STM32自学笔记-7-CAN总线通信

STM32F103只有1个CAN

2022-04-27 17:21:16 4320

原创 STM32自学笔记-6-RS485串口通信

RS485和232的不同在于

2022-04-22 18:53:40 7890 5

原创 STM32自学笔记-5-SPI和Flash芯片2

测试程序中先初始化W25Qxx外设BSP_W25Qx_Init

2022-04-19 17:55:41 998

原创 STM32自学笔记-4-SPI和Flash芯片

I2C中曾经说过其实目前基本用Flash而不用E2PROM,E2PROM最大的特点是按字节操作,Flash则是按扇区操作。目前STM32单片机教程里基本上都是用W25Q128这款SPI Flash芯片来教学SPI通信,我手头上开发板也是使用了这个芯片,一起来看下SPI通信的实现方法。W25Q128是一款NOR Flash(关于NOR和NAND,在这里不是重点,这里重点在应用),128Mb(16MB)大小,有256个块(Block),每个块包含16个扇区(Sector),可以计算出每个扇区的大小为128*

2022-04-18 17:57:15 3548

原创 STM32自学笔记-3-IIC

我看网上大部分的实例都是使用IIC和E2PROM进行通信,我自己用的正点原子的板子也是连着24C02的芯片,但我不知道大部分的实际项目里面有没有用E2PROM的,是不是直接用Flash的比较多?而IIC通信用作其他一些外设的通信,例如颜色识别传感器。原理基本大同小异,我也还是使用E2PROM来学习一下IIC通信。正点原子开发板的原理图上24C02的SCL和SDA直接连着F103的PB6和PB7,即I2C1,配置一下CubeMX上的I2C1模块,只需要默认即可。...

2022-04-09 16:51:31 1026

原创 STM32自学笔记-2-DAC模块

简单来说,STM32F103的DAC模块可以根据HAL_DAC_SetValue的数字参数(0-4096,因为是12位的DA,和ADC的位数一样)来输出0-3.3V的直流电压。这个例子我通过串口输入需要转换的DAC的值,然后使用外用表观察IO口的电压是否对的上这个值。首先用STM32CubeMX来配置各个参数,其中DAC的配置为默认生成代码后,重写printf和scanf。在main函数里开启DAC,并给DAC的值初始化为0 HAL_DAC_Start(&hdac, DAC_CHANN

2022-04-07 21:09:02 1095

原创 STM32自学笔记-1(软件仿真时出现“Flash Download failed”的解决办法)

st-link flash download failed的解决办法

2022-04-07 09:43:46 7590 2

原创 STM32自学笔记-0-重写printf和scanf

重写printf和scanf在调试单片机程序时,使用串口输出信息是很方便的,重写printf函数后,代码里可以使用这个语句很容易的输出相应信息。同理,重写scanf函数可以很容易的收取串口获得的信息。比较常用的方法在main.c里添加一段fputc函数,来完成printf的重写int fputc(int c, FILE * f){ ch=c; HAL_UART_Transmit(&huart1,&ch,1,1000);//发送串口 return c;}

2022-04-04 11:38:32 1513 2

原创 openCV自学笔记-2. 视频播放

读取并播放视频opencv中的VideoCapture类可以对视频读取和显示。具体的做法是在循环中不停读取每帧的画面并显示,一直等帧读完为止,下面这段代码还是很容易理解的。 VideoCapture capture("0.mjpeg"); while (1) { Mat frame; capture >> frame; if (frame.empty()) { break; } imshow("Video", frame); waitKey(2.

2022-01-06 11:34:48 2173

原创 OpenCV自学笔记-1 配置

配置环境变量下载安装完毕后,即可进行环境变量配置,点击Path用户变量,配置后如下图所示

2022-01-05 23:33:05 2097

原创 从0开始学C#-part16 LINQ

LINQ是.NET设计者提供的一个从应用程序代码中查询数据的功能,叫做“语言集成查询”(Language Integrated Query, LINQ)。LINQ的语法和语义和SQL很像

2021-12-31 17:19:24 481

原创 从0开始学C#-part 15-委托和事件

C#提供两种机制,一个机制通知发生了紧急事件,另一个机制规定在发生事件时应该运行某种方法。这就是事件和委托我认为委托和事件在一起学习比较好。委托:可以理解为方法的抽象,就是定义一个方法的模板,至于这个方法具体是怎么样的,就由方法自己去实现。...

2021-12-27 20:31:39 98

原创 从0开始学C# - part14 文件的输入与输出

文件的输入和输出在和实际业务的关联挺大的,例如程序运行要写个日志文件,就要用到输出。程序里打开某个文件读取信息,就要用到输入。C#对文件的操作用到IO命名空间,即在代码中要加入using System.IO;,这里面包含了很多与I/O有关的类,我重点学习以下几类:FileStream类可以创建一个FileStream对象来新建一个文件,或者打开一个已有文件,语法如下:FileStream <object name> = new FileStream(<file_name>,

2021-12-16 22:03:36 222

原创 从0开始学C#-part 13 集合(下)

Dictionary<TKey, TValue>集合类这个类在内部维护两个数组来实现关联,类似于表格,两种元素一对一Dictionary<string, int> ages = new Dictionary<string, int>();ages.Add("CHJ", 7);ages.Add("CY", 40);ages["TD"] = 36; //两种添加元素的方式ages["CJG"] = 65;foreach(KeyValuePair<s.

2021-12-09 11:12:20 47

原创 从0开始学C#-part 12 集合(上)

16.集合类.NET Framework提供了几个泛型类,它们集合元素,并允许应用程序以特殊方式访问这些元素。下面一个个的学List<T>集合类List<T>相比数组使用起来方便很多,创建时无需指定容量,会随着元素的增加或减少来自动伸缩,用.号可以call出Remove(从集合中删除指定元素), Add(在集合尾部添加元素), Insert(在集合指定位置插入元素), Sort(对数据排序)等方法。List<int> numbers = new List

2021-12-08 17:44:22 64

原创 从0开始学C#-part11 泛型

C#里面的泛型包括泛型,泛型类,泛型方法,泛型接口

2021-12-06 22:38:30 155

原创 从0开始学C#-part10-索引器

14. 索引器前面学过的属性,封装的是类中的一个值,而这里要学的索引器封装的是一组值,索引器和数组很类似,兼具属性和数组特征。public bool this [int index]定义了索引器,返回值是bool类型,索引器的成员为int值。索引器必须要用this和关键字。和属性对照来看,属性是用于类里定义的私有数据,索引器就是用于类class或结构struct里定义的私有数组。看下面这个例子,是最简单的索引器实例。public class IDXer{ private string[] nam

2021-11-21 17:52:59 221

原创 从0开始学C#-part9.属性详解

13. 属性详解属性是字段和方法的交集,看起来像字段,用起来像方法。访问属性所用的语法和访问字段一样光看这一段其实毫无感觉

2021-11-19 13:49:42 184

原创 从0开始学C#-part 8

11. 创建接口使用接口,可以把“有什么”和“怎么做”分开,接口指定“有什么”,即方法的名称、返回类型和参数。接口描述了类提供的功能,但不描述功能如何实现接口的精髓在于提供一些类共同的地方,而且能“多继承”。接口的作用更多是在工程上,一般用来封装通用的行为,来达到程序的多态。类似于方法的重写,但无需使用override关键字看看以下的两段话是不是可以帮助更容易理解接口1.通过接口更容易表现设计,更容易沟通,而且接口是没有实现代码的,因此,定好接口,再写实现代码,就算设计上有变动,也可以通过接口轻易

2021-11-13 23:24:36 319

AP3216C-datasheet

AP3216C-datasheet

2023-11-29

空空如也

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

TA关注的人

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