- 博客(44)
- 收藏
- 关注
原创 Linux系统编程:进程
fork()在调用出生成一个子进程。过去,创建子进程会直接复制一份父进程的内存空间,但后来经过改进,父子进程在存储空间上使用写时拷贝,即子进程对父进程的内存空间为只读,当需要操作某内存时,会将其拷贝。返回值0则为子进程,非负数父进程,调用失败-1。
2024-02-03 03:39:17
1024
1
原创 Linux系统编程:文件编程
写一个demo.c先打开文件,文件不存在open返回-1,然后创建这个文件 利用 fd = open("./file1",O_RDWR|O_CREAT,0600);因为 6 = 4 + 2 ,4和2表示权限可读可写然后write进去字符串此时直接read,什么也读不到,因为光标位于字符串尾部,从光标往后读取自然为空简单粗暴的办法就是关闭文件再打开,光标自动从头部开始然后就可以读取到写入的内容了,最后关闭文件。
2023-09-11 15:59:15
215
原创 KFC玩具HelloKitty风扇改造——ESP32蓝牙blinker、1404无刷电机、双18650
KFC玩具HelloKitty风扇改造——ESP32蓝牙blinker、1404无刷电机、双18650。使用NodeMCU-32S。PWM调速为0~1024,取550到650这个区间。
2023-08-19 15:30:03
444
2
原创 基于STM32+FreeRTOS的四轴机械臂
基于FreeRTOS实时操作系统,主控为 STM32F103C8T6 ,机械臂为四轴分别被四个Mg90s舵机控制。本项目实现了 3 种控制方法,分别为 摇杆控制 、 串口蓝牙控制 和 示教器控制。可以进行动作录制和执行。采用8路ADC采集摇杆和示教器的模拟量并由DMA搬运数据,USART串口实时收发信息,IIC驱动OLED屏幕实时显示信息。并且实现了动作录制和执行功能,动作记忆可以由二维数组或者链表实现存储。通过SPI驱动W25Q128模块进行动作记忆扩容,即可以录制上百组动作。
2023-08-19 03:06:47
4354
8
原创 ESP32-CAM ——Blinker平台
ESP32-CAM,点灯云平台Blinker,MQTT协议,APP控制,Wifi视频监控,点灯,控制舵机。
2023-08-08 03:59:23
6002
20
原创 FreeRTOS(4):软件定时器、中断管理
简单可以理解为闹钟,到达指定一段时间后,就会响铃。STM32 芯片自带硬件定时器,精度较高,达到定时时间后会触发中断,也可以生成 PWM 、输入捕获、输出比较,等等,功能强大,但是由于硬件的限制,个数有限。软件定时器也可以实现定时功能,达到定时时间后可调用回调函数,可以在回调函数里处理信息。请参考 51 及 STM32 中断相关课程。
2023-08-02 20:22:50
1697
原创 FreeRTOS(3):事件标志组、任务通知
FreeRTOS 从版本 V8.2.0 开始提供任务通知这个功能,每个任务都有一个 32 位的通知值。按照FreeRTOS 官方的说法,使用消息通知比通过二进制信号量方式解除阻塞任务快 45%, 并且更加省内存(无需创建队列)。在大多数情况下,任务通知可以替代二值信号量、计数信号量、事件标志组,可以替代长度为 1 的队列(可以保存一个 32 位整数或指针值),并且任务通知速度更快、使用的RAM更少!
2023-08-02 18:26:32
404
原创 FreeRTOS(2):队列、信号量、互斥量
信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并发调用。信号量这个名字,我们可以把它拆分来看,信号可以起到通知信号的作用,然后我们的量还可以用来表示资源的数量,当我们的量只有0和1的时候,它就可以被称作二值信号量,只有两个状态,当我们的那个量没有限制的时候,它就可以被称作为计数型信号量。信号量也是队列的一种。二值信号量其实就是一个长度为1,大小为零的队列,只有0和1两种状态,通常情况下,我们用它来进行互斥访问或任务同步。
2023-08-01 22:35:40
691
原创 FreeRTOS(1):任务
Free即免费的,RTOS的全称是Real time operating system,中文就是实时操作系统。注意:RTOS不是指某一个确定的系统,而是指一类操作系统。比如:uc/OS,FreeRTOS,RTX,RT-Thread等这些都是RTOS类操作系统。FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。
2023-07-30 19:19:09
611
原创 基于STM32的环境监测预警系统
主控STM32f103c8t6 。利用 DHT11 和烟雾传感器,进行温湿度检测和烟雾值检测,并实时在LCD屏幕上进行数值显示,同时通过串口通信将数据信息传至上位机显示。当检测到温湿度高出设定阈值,将打开排风扇进行通风;当检测到有烟雾时,将关闭通风风扇防止火灾蔓延,开启蜂鸣器警报并持续向上位机发送警报信息。
2023-07-29 22:26:47
3336
3
原创 STM32:SPI
SPI是串行外设接口(Serial Peripheral Interface)的缩写,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,越来越多的芯片集成了这种通信协议,比如 AT91RM9200。W25Q128 是华邦公司推出的一款 SPI 接口的 NOR Flash 芯片,其存储空间为 128 Mbit,相当于16M 字节。
2023-07-25 10:58:45
979
原创 STM32:OLED使用(IIC)
参数一:I2C_HandleTypeDef *hi2c,I2C设备句柄参数二:uint16_t DevAddress,目标器件的地址,七位地址必须左对齐参数三:uint16_t MemAddress,目标器件的目标寄存器地址参数四:uint16_t MemAddSize,目标器件内部寄存器地址数据长度参数五:uint8_t *pData,待写的数据首地址参数六:uint16_t Size,待写的数据长度参数七:uint32_t Timeout,超时时间返回值:HAL_Status
2023-07-24 10:51:42
399
原创 STM32:ADC
全称:Analog-to-Digital Converter,指模拟/数字转换器。ADC的性能指标量程:能测量的电压范围分辨率:ADC能辨别的最小模拟量,通常以输出二进制数的位数表示,比如:8、10、12、16位等;位数越多,分辨率越高,一般来说分辨率越高,转化时间越长转化时间:从转换开始到获得稳定的数字量输出所需要的时间称为转换时间
2023-07-24 07:13:13
348
原创 STM32:DMA
DMA(Direct Memory Access,直接存储器访问) 提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存的工作来说就无法使用。简单描述:就是一个数据搬运工!!
2023-07-24 06:00:22
110
原创 STM32:看门狗
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称“看门狗”(watchdog)。独立看门狗工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟(LSI),由VDD 电压供电, 在停止模式和待机模式下仍能工作。
2023-07-23 10:52:14
781
原创 STM32:串口(蓝牙/WIFI/4G)
串口发送数据,使用超时管理机制串口接收数据,使用超时管理机制串口中断模式发送串口中断模式接收作用:以阻塞的方式发送指定字节的数据形参 1 :UART_HandleTypeDef 结构体类型指针变量形参 2:指向要发送的数据地址形参 3:要发送的数据大小,以字节为单位形参 4:设置的超时时间,以ms单位。
2023-07-19 10:51:46
1994
3
原创 基于STM32的感应开关盖垃圾桶
PWM波的频率不能太高,大约50HZ,即周期=1/频率=1/50=0.02s,20ms左右。使用超声波测距,当手离传感器距离小于5cm时,LED1点亮,否则保持不亮状态。编写微秒级函数:传入要延时多少微秒,开始延时,延时到指定时长,停止延时。检测靠近时,垃圾桶自动开盖并伴随滴一声,2秒后关盖。发生震动时,垃圾桶自动开盖并伴随滴一声,2秒后关盖。按下按键时,垃圾桶自动开盖并伴随滴一声,2秒后关盖。Echo信号,由低电平跳转到高电平,表示开始发送波。SG90舵机,超声波模块,震动传感器,蜂鸣器。
2023-07-17 23:40:27
143
原创 STM32:定时器、PWM
软件定时缺点:不精确、占用CPU资源使用精准的时基,通过硬件的方式,实现定时功能。定时器核心就是计数器。基本定时器(TIM6~TIM7)通用定时器(TIM2~TIM5)高级定时器(TIM1和TIM8)STM32F103C8T6定时器资源:通用定时器介绍:1) 16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。2) 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意数值。
2023-07-16 22:04:35
764
原创 基于STM32的电动车防盗器设计
感应震动,遥控,控制(蜂鸣器代替也行)。无线遥控器两按键对应 “锁起” 和 "关闭" 两种状态;“锁起” 状态下,感受到震动就通过继电器使喇叭响起一段时间;"关闭" 状态下,锁状态指示灯常亮。也可以做更多功能扩展,如针对不同按键被按下时,有不同的喇叭声响应效果。此项目参考本人之前做过的C51版本,更多详情如外设原理等,请看该文章。
2023-07-16 03:11:48
663
原创 STM32入门(cubeMX)
单片机(Single-Chip Microcomputer)是一种集成电路芯片,把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。项目介绍内核Cortex-M3Flash64K x 8bitSRAM20K x 8bitGPIO。
2023-07-16 00:27:22
7512
1
原创 基于C51的语音智能车(含循迹/跟随/避障/测速屏显/蓝牙WIFI4G控制等功能)
概况:本项目完全开源,基于stc89c52rc,语音控制切换循迹/跟随/避障/蓝牙控制等模式,包含测速屏显并传给上位机等功能。
2023-07-11 09:04:33
7066
42
原创 C51:IIC_OLED
IIC全称Inter-Integrated Circuit (集成电路总线)是由PHILIPS公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备。IIC属于半双工同步通信方式。
2023-06-25 09:08:30
840
原创 基于C51的 温湿度监测系统(及蓝牙温控风扇)
C51、DHT11、LCD1602、蓝牙模块、继电器、直流电机及扇叶。实时监测温湿度并通过LCD显示和串口蓝牙传输,蓝牙控制风扇开、关和自动温控模式,自动温控模式可以设置需要的温度阈值,达到阈值启动风扇,低于阈值自动关闭。附有源码。目录一 DHT11温湿度传感器检测模块是否存在二 温湿度通过串口传给PC三 在LCD1602上显示温湿度四 蓝牙控制风扇电机实现。
2023-06-24 09:44:53
1961
原创 C51外设:LCD1602
第 1 脚: VSS 为电源地第 2 脚: VDD 接 5V 正电源第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10K 的电位器调整对比度。第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第 5 脚:R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。
2023-05-28 23:05:21
1757
原创 C51:蓝牙/Wifi/4G 无线控制开关
3.esp8266无法连接TCP关闭防火墙,检查端口号有没有建立,检查发送的格式有没有错漏。发送 AT+CIFSR 查看station的ip是否和你建立的tcp服务器的网段一致 需要和你电脑在同一个wifi下。
2023-05-26 22:41:53
1828
原创 C51:串口
串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢是设备间接线通信的一种方式数据一位一位地顺序传送双向通信,全双工传送速度相对较慢。
2023-05-24 23:13:50
1550
2
原创 C51:感应开盖垃圾桶
接线参考:模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板和端口超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。震动、按钮或者超声波距离检测,触发蜂鸣器饷以及开盖2秒。两秒后,如果人还一直在检测范围内,就不关盖。
2023-05-20 23:51:58
234
原创 C51:PWM+舵机角度控制
PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.脉冲宽度调制通过占空比编码模拟信号一个周期内,高电平占据时长的百分比如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制。
2023-05-20 01:00:04
2426
原创 C51定时器
晶振(晶体震荡器),又称数字电路的“心脏”,是各种电子产品里面必不可少的频率元器件。数字电路的所有工作都离不开时钟,晶振的好坏、晶振电路设计的好坏,会影响到整个系统的稳定性。
2023-05-19 23:41:50
489
原创 C51:无线遥控电动车防盗器
通过继电器来控制电路,比如智能插座,比如220V的灯,比如我们项目不带开关的傻瓜式报警器当设置继电器为低电平处罚时,STC89C52RC的IO输出低电平,就会导致COM口和NO口闭合,也就是完成报警器的串联电路,开始响。现在我们就可以来写程序,完成振动控制警报的功能
2023-05-19 21:07:18
617
原创 STC89C52:快速搭建与IO
LQFP:我们用的52单片机的封装类型,看起来是方形的。打开keil开始写第一个程序:点灯1. 创建项目工程文件夹,可以当作模板Template2. 创建文件,取名main.c (要打开拓展名,在文件夹窗口上找 “查看”,勾选“文件拓展名”)3. 进入keil主页面,工具栏project->new uVision project->选择第一步的工程文件夹位置->输入工程名字->选择芯片类型AT89c52->会提示是否拷贝STARTUP.A51,选择是->生成了工程目录-
2023-05-19 17:13:11
2182
原创 Linux+C语言:基于ncurses库的贪吃蛇游戏
运行次数多了有个新问题,终端窗口总是莫名其妙卡bug其中有一种状况会导致终端打字看不见用stty echo,至此,游戏基本完成,可以在添加一些其它小功能,例如穿墙会出现在另一端等等。我这里添加一个得分score来统计分数。main函数里,一个新语句 join 暂停线程,避免线程和主线程输入冲突。全部代码如下gcc Snake.c -lpthread -lcurses即可运行,代码有两百多行一共,比较繁琐还请见谅。
2023-05-18 06:13:46
1228
原创 Linux:Ubuntu补充学习
在windows上编写的文件,上传至Linux上,vim编辑时乱码。原因是windows默认使用gbk编码,在Linux上,使用iconv命令可以转码:#iconv -f GBK -t UTF-8 test.txt -o test2.txt 再次vim编辑时OK。
2023-05-06 15:28:15
93
原创 C语言5:结构体
有点像java里的类的概念,可以用点运算符进行赋值,或者定义时大括号直接赋值定义结构体时要和定义全局变量时一样加上“;”不同于函数另外这里拓展了用字符串数组存汉字的方法:运行结果:YuZhaoQun男222698271719wrx女31476062109形式类似二维数组三 应用:选票系统需求:结构体包括姓名和票数,用户可以输入每个选民的名字来定义结构体,再逐次输入名字进行投票(唱票环节),最后输出当选者及其票数,还有弃票的数量(这里代码就不写了,业务逻辑蛮清晰的)注意:唱票
2023-05-05 02:44:35
179
原创 c语言4:字符串
现计算表达式,如果值为假(0),打印一条错误信息并停止运行。//防止悬挂指针(野指针的一种)gets本质上可以无限读取,容易造成内存泄漏。:表示一个指针的内存大小,而不是字符串大小。malloc动态开辟字符串 栈 ==》堆。结尾包含一个字符串结束标志':给前者扩充后者(数字)大小。把后者拼接在前者上,有返回值。可见字符串数组中可以直接用。//释放内存,防止内存泄漏。扩容后地址:cc1410。:只计算有效字符的长度。扩容地址:cc1410。//都初始为‘\0’
2023-05-04 17:24:09
182
原创 C语言2:函数
可见方法和主函数中x值虽然相等但是不相同,是不同的内存地址,但是如果传入数组,就是相同的,并且可以两边同时修改。注:形参中不存在数组的概念,即使定义了数组大小也不行,数组名只会传入一个地址,数组首地址,8个字节表示一个地址。
2023-04-24 15:45:22
143
原创 C语言1:快速回顾
原ide用的,但是在个别函数的使用如使用时只能用特定的兼容的的特殊写法,不太喜欢,暂时换成了后来将ide换成了,配合cmd指令使用,新建文件再使用时发现打印中文为乱码,解决方案如下,新建文件编码改为ANSI码。
2023-02-28 02:00:52
132
原创 MyBatis小白入门
这里用 #{ } ,那么输出就是带双引号的,如果用 ${ } 那本来是什么就是什么。成功11的张三改成Tom(13位置那个Tom忽略,搞错了,刚好下一步删掉操作)按数据库需求写出对应属性,并生成构造函数,toString get set方法。新建dao和一个新的Java类Mapper,类型为interface。为什么最后gender改成了g呢,因为是什么无所谓,它不管是什么,因为MyBatis不认识上面那个 1.1 里的参数,应该改成@Param()上个部分其实以及写出来了查的操作,
2023-02-04 02:54:53
56
基于C51的语音智能车(含循迹/跟随/避障/测速屏显/蓝牙WIFI4G控制等功能)
2024-02-25
基于STM32的环境监测预警系统
2023-08-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人