自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 虚拟机Ubuntu断网解决方案

执行这三个命令就好了。

2026-03-25 18:59:10 35

原创 makefile的使用

在Linux中使用make命令来编译程序,特别是大程序;而make命令所执行的动作依赖于Makefile文件。如果只有一个文件,手动编译会很方便,但是如果有很多文件就会很不方便。如编译多个文件时会严重影响效率,应该分别编译最后链接。通过比较更新的时间会知道那个文件修改了make文件的规则目标文件:依赖文件命令如makefile。

2025-11-11 20:53:29 168

原创 gcc编译过程

c文件->预处理.i文件->编译.s文件->汇编.o->链接。

2025-11-10 21:55:42 235

原创 stm32f103实现tim1,2,3用于输出pwm,tim4计时

1,通过定时器1输出的pa11不能输出pwm原因是tim1是高级定时器,需要加上TIM_CtrlPWMOutputs(TIM1, ENABLE);2,初始化定时器,GPIO引脚。4,时基单元初始化。5,输出比较初始化6,定时器使能。2,想通过定时器的其他通道输出pwm只需将TIM_OC1Init(),TIM_SetCompare1()这里面的数字改通道数就好了。所以为了通过多个定时器输出pwm,我们只需要在配置时把相应配置同时打开就好了。本文用于教学用tim1,2,3实现输出pwm,tim4用于计时。

2025-09-12 21:06:42 311

原创 c语言顺序表与链表

n个数据特征类型相同的元素构成的有限序列,称为线性表。

2025-07-30 17:47:46 283

原创 c语言指针,结构体,内存内在分配笔记

3.数组中的每一个元素可以用下标表示,如果一个位数组,有n个元素,那么下标的取值范围是0~n-1。静态声明的变量和全局变量使用这部分内存,这些变量在程序开始时分配,知道程序终止才消失。根据需求编写代码动态分配内存,可以编写代码释放,内存的内容直到释放才消失。内存每个字节会分配一个32位或64位的编号,编号称为内存地址。结构体是一个或多个变量的集合,这些变量可以是不同的类型。函数内部声明的变量使用这部分内存,在函数被调用时创建。如果结构体很大,使用指针的效率会更高。如果成功,返回堆内存内存上的指针。

2025-07-29 20:04:18 268

原创 esp01s连接手机热点,及连接oneENT平台

AT+MQTTPUB=0,"$sys/{pid}/{device-name}/thing/property/post","{\"id\":\"123\"\,\"params":{\"(标识符)\":{\"value\":true\}}}",0,0。//连接到onenet的MQTT服务器,“mqtts.hecloudes.com”是网址,1883是端口号。AT+MQTTUSERCFG=0,1,"设备ID","产品ID","签名",0,0,""然后出现这个,转换完成。

2025-07-15 21:55:19 590

原创 用手机连接esp-01s的方法

不过现在也面临一些问题:每一次重新将esp01s上电之后都要再次写入at指令,不然会连接失败,据deepseek回答说这是不正常的。而且我有两个esp01s一个烧录了flash_download_tools_V3.6.4,另一个没有,但两个都是这样。pc端串口调试助手(不一定是安信可的串口调试手,只要能发送at指令就可以了),固件烧录器一个,(usb转ttl也可以,不过线要尽量短)发送AT指令时需要回车一次在发送,这样AT指令才有用。2.设置esp8266参数。esp-01s一个,依次发送以下AT指令。

2025-07-14 15:06:41 360

原创 can总线笔记

can(控制器局域网)为串行通信协议,可以有效支持高安全的分布实时控制。考虑到兼容性,can有以下层次• CAN对象层(• CAN传输层(•物理层(有两根通信线,无需共地。半双工,可挂载多设备。can总线有开环与闭环,闭环为高速,开环为高速。can总线为闭环发送can总线规定了以下帧格式数据帧各部分用途简介遥控帧,包含报文id,适合频率低的情况错误帧过载帧,延缓数据发送帧间隔位填充,没发送五个相同位的时候发送一个相反的位,接受位会将这个相反的位移除实例接收方数据采样。

2025-06-15 22:55:35 219

原创 freertos基础知识2

在切换任务是应该保存当前数据与状态。真正的执行上下文切换在pendsv的isr中执行,使用pendsv可以手动触发,并且可以在其他更改优先级的isr配置。freertos滴答,freertos实时操作系统内核通过滴答计时器测量时间,为systick。空闲任务:rtos启动时自动创建的任务,确保始终存在有一个能运行的任务。还可以负责删除任务内存。滴答中断与任务执行完毕就可以触发pendsv产生异常中断。

2025-06-09 20:33:28 135

原创 stm32定时器中断

stm32的定时器 中断就是先配置时基单元,然后配置nvic,在写入中断函数就好了。中断函数可以在startup_stm32f10x_md.s文件中找到。

2025-06-05 21:15:30 211

原创 rtos实时操作系统基础知识

rtos可以在多个程序执行时不用等待。还可以释放cpu性能。rtos中可以将不同的功能写作不同的任务然后给他们不同的优先级。优先级高的任务快速执行,低的在空闲时执行。如果单片机运行内存,闪存小时不适合运行rtos并行:多任务同时执行。并发:多个任务不同时进行。单核cpu可以通过快速切换任务执行多个任务。freertos对更高优先级的任务用抢占式优先级,同优先级用时间片轮询调度。高优先级的任务并不会一直执行,导致低优先级的任务无法执行。如果高优先级等待资源、延时,时会执行低优先级任务。

2025-05-31 22:58:30 218

原创 移植freertos时报错100多的解决方案

经过网上查资料,在移植内核文件时需要移植的时gcc里面的文件,并不是如图中的RVOS文件,只要将gcc文件的ARM_CM3代替RVOS文件的位置就好了。最近尝试了移植freertos,但是跟着别人的教程,经常会有122个报错。然后在stm32f10x_it.c文件注释掉这几个函数。另外freertosconfig.h文件要定义以下代码。

2025-05-31 21:17:39 273

原创 pcb笔记,pcb布线

根据ams1117手册可以看到需要滤波100uF电容。ctrl+shift+x可以自动将pcb对照原理图定位元件位置。本次绘制了89c51单片机最小核心板电源电路。vbus为电源正极。cc1,cc2负责快充。控制电源与降压模块的开关。shift+x 可以快速定位元件位置。shift+b重新铺铜。6p的type接口。晶振要贴近引脚布置。

2025-05-29 22:10:38 202

原创 pcb学习笔记1

pcb设计流程:原理图设计,布局布线,pcb设计,生产加工,焊接组装。npn型三极管:箭头由内指向外。pnp型三极管:箭头右外指向内。电路元件在不同频率下有不同状态。丝印,写在pcb上的注释。场效应管与三极管的区别。

2025-05-26 19:27:59 297

原创 stm32iic笔记

set 为高电压,代表1reset 为低电压 代表0起始位:scl高电压,sda由高变低。停止位:scl高电压,sda由低变高从机应答信号:主机释放sda,将sda写1,从机再将sda拉低。主机接受到应答信号后就可以传送数据了。发送方发送一个字节,接收方回复一个ack。先发送高位。

2025-05-23 22:24:01 457

原创 stm32串口笔记0,及使用串口printf

首先引脚由高电压变为低电压,代表起始位,然后发送8位数据,先发送低数据位,低电压代表0,高电压代表1。空闲状态为持续的高电压。transmit 数据发送位。receive数据接收位。最后一位可作为校验位。奇校验:要求数据中有奇数个1。偶校验:要求数据中有偶数个1。usart模块基本使用方法如果通过usart模块发送数据,只需要将数据写入发送数据寄存器,usart模块就会通过tx引脚以数据帧发送。

2025-05-22 22:21:54 796

原创 stm32adc扫描模式

这里使用两个ao分别接pa0,pa1,然后使能扫描模式,再将通道0,通道1写入注入序列当中。把注入序列的长度写为2。在通过外部触发信号启动注入序列。启用定时器1trgo产生1ms周期的脉冲信号。然后注入序列将通道0采样的结果放到jdr1_16bit,通道1采样结果放到DR2_16bit,读取寄存器的值就可以得到结果。扫描模式的作用就是使能adc同时对多路通道进行转换。

2025-05-21 15:33:31 286

原创 adc模块的定时器触发

使用trgo的update模式,当时基单元产生update时间之后trgo对外输出一个脉冲,如果设置update以1ms发生一次,update就会以1ms为间隔发送脉冲。当trgo触发一次注入序列会被执行一次,每次转换会得到模拟序列上的一个点。trgo自动发送脉冲,当jeoc从0变成1,标志着转化完成,在从jdr1读取数据,再对jdoc清0。通过定时器产生脉冲信号叫定时器外部触发,上次使用常规序列,这次使用注入序列。1.初始化io引脚,2.开启时钟,3.配置串口参数,4.闭合总开关。

2025-05-21 12:06:36 802

原创 stm32的ADC笔记

将ao引脚连接到adc,因为要对通道0进行转换,将通道0写入常规序列1行当中,然后通过左边的外部触发信号发送一个脉冲,这个脉冲启动常规序列。然后按照常规序列里的内容先闭合通道的开关,从pa0处取一个点在断开开关,12位逐次逼近型adc将采集到的信号转化位数字信号,将转化的结果保存到DR中,最后读取DR寄存器,就可以计算出电压了。接下来通过软件启动发送一个脉冲进入常规序列,上升沿启动常规序列,对通道一进行转换,将结果保存到DR_16bit当中。1.将通道0,第一行,13.5的周期写入常规序列。

2025-05-20 20:46:42 826

原创 pid平衡小车1

1,初始化tim2_trgo,j将TRGO设置成update模式,每当时基单元产生update事件的时候产生一个脉冲。产生一个10ms的频率,将预分频器psc设置为71,arr设置为9999,rcr只有高级定时器才有,设置为0.打开启动文件starup_stm32f10x_md.s dcd后为中断表。打开stm32f103x.h文件,搜索irqn就可以找到中断号。首先对电池进行初始化,通过adc计算电池的电量。2.对adc进行初始化,设置成6分频。将pb0初始化为,模拟模式。

2025-05-19 22:35:37 275

原创 第一次学指针笔记

创建变量的本质是向内存申请空间,&为取地址操作符,取到变量中最小的地址。int*pa,pa的类型是int* *表示pa是指针变量,*叫解引用操作符。const 修饰指针变量,放在*左边,限制的是指针变量的类容,也就是不能通过指针变量来修改他所指向的类容,但是变量本身可以改变。数据在内存中,内存划分为一个个单元,每个内存单元大小是1字节,一字节等于8bit.void* 无具体类型的指针,泛型指针,不能直接加减运算,不能解引用。数组的大小需要常量,表达式指定,不能是变量。指针类型决定了指针加一的步长。

2025-03-28 19:52:51 226

空空如也

空空如也

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

TA关注的人

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