- 博客(47)
- 收藏
- 关注
原创 Git使用
原因:我们本地的Git默认主分支的名称是master,但远程仓库的默认主分支名称为main,导致本地仓库与远程仓库的分支之间名称不同,进而代码推送出问题。若出现error: failed to push some refs to 'https://gitee.com/…如果不想忽略某个被ignore的路径下的某文件,可在该文件前加!顾名思义,在git的时候会忽略掉里面包含的文件。.gitignore可以放置到工程中的任一。一般情况下,单片机嵌入式代码的模板如下。路径,则规则对该路径的全部文件和文。
2025-05-24 16:26:25
553
原创 多环串级PID
单环只能单一控制速度或者位置,如果想要同时控制多个量如速度,位置,角度,就需要多个PID。外环调控周期要大于等于内环,具体周期给多少,要不断尝试。外环Kp不用怕超调,直接调到抖动再减小,用Kd减少超调。不能使innertarget=目标速度。正确做法是更改限幅,速度要小限幅就小。
2025-05-08 22:26:44
958
原创 CAN通信
结构体中的 .IDE 成员是用来决定报文是使用标准ID还是扩准ID,如果这个成员等于 CAN_ID_STD ,也就是使用标准ID,此时 .ExtId 中的内容就不起作用了;不过这个结构体并不需要我们来赋值,而是作为接收函数的输出参数。f407主频168M,apb1外设42M。
2025-05-06 11:49:29
895
原创 Hal库下备份寄存器
生成后应该会有这两个文件(不知道为什么生成了好几次都没有,复制工程在试一次就有了)__HAL_RCC_PWR_CLK_ENABLE();//使能电源时钟 PWR。//取消备份区域写保护。如果要读写BKP寄存器的数据,首先要先解除BKP寄存器的写保护,代码如下。//RTC 时钟使能。可以看到stm32f407有20个备份寄存器。首先要确保有外部电源给VBAT供电。
2025-05-03 20:16:02
311
原创 用定时器做微妙延时注意事项
(2)通用定时器timer2-timer5,通用定时器timer12-timer14以及基本定时器timer6,timer7的时钟来源是APB1总线。(1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线。我拿tim14去做微秒级延时PSC为167,一直读取不到dht11数据,真搞心态啊。注意定时器来着APB1还是APB2,二者频率不一样,配置PSC要注意。tim14在apb1,频率是84。延时函数 可直接复制。
2025-05-02 20:11:38
504
原创 更改时基进入B.ENDP
cubemx更改时基生成的stm32f4xx_hal_timebase_tim.c并不会自己添加。即中断服务函数,需要自己加上才能解决。
2025-05-02 13:16:45
221
原创 PID算法
PID是比例 列(Proportional)、积分(Integral)、微分(Differential)的缩写PID是一种闭环控制算法,它动态改变施加到被控对象的输出值(Out),使得被控对象某一物理量的实际值(Actual),能够快速、准确、稳定地跟踪到指定的目标值 (Target)PID的任务是使误差始终为0。
2025-04-16 22:59:59
821
原创 TIM输出比较--PWM
OC(Output Compare)输出比较(IC输入捕获)输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形每个高级定时器和通用定时器都拥有4个输出比较通道,基本定时器没有高级定时器的前3个通道额外拥有死区生成和互补输出的功能。
2025-04-10 18:15:54
444
原创 SPI通信
四根通信线:SCK/SCLK/CLK/CK(Serial Clock))、 MOSI/DO (Master Output SlaveInput/Data Output) 、MISO/DI (Master Input Slave Output) 、SS/NSS/CS (Slave Select/Not Slave Select/Chip Select)(一个从机一条ss线,ss置低电平开始通信)从机上的DI要连主机的MOSI同步,全双工支持总线挂载多设备(一主多从)
2025-03-31 14:21:33
654
原创 I2C总线协议
I2C是双向二线制(SDA数据线和SCL时钟线)同步串行总线同步:数据的传输是在一个共同的时钟信号控制下进行的,发送方和接收方都根据这个时钟信号来确定数据的发送和接收时机串行:表示数据是一位一位依次传输的,而不是像并行总线那样多个数据位同时传输。串行传输方式减少了硬件引脚的数量,但传输速度相对并行传输来说可能会慢一些。在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送。
2025-03-30 16:58:31
703
原创 通信协议之串口
点对点,只能两设备通信只需单向的数据传输时,可以只接一根通信线当电平标准不一致时,需要加电平转换芯片(一般从控制器出来的是信号是TTL电平)地位先行。
2025-03-29 20:35:27
778
原创 FreeRTOS之调试与优化
接着利用vTaskGetRunTimeStats:获得任务的运行信息,形式为可读的字符串。内存越界经常发生在堆的使用过程中,堆,就是使用malloc得到的内存。vTaskList :获得任务的统计信息,形式为可读的字符串。printf:FreeRTOS 工程里使用了 microlib,里面实现了 printf 函数。2:使用简单的栈边界检查方法,并且在任务切换时也进行检查,检测更频繁。pcTaskName:指向发生栈溢出的任务名称的字符串指针。xTask:指向发生栈溢出的任务句柄。0:禁用栈溢出检测功能。
2025-03-17 07:30:00
828
原创 FreeRTOS之资源管理
任务中使用:taskENTER_CRITICA()/taskEXIT_CRITICAL()要独占式地访问临界资源,有3种方法。屏蔽了中断,不会有任务调度产生。
2025-03-17 00:15:00
139
原创 FreeRTOS之中断管理
如果这个硬件中断的处理是非常耗费时间,在ISR中尽快做些清理、记录工作,然后触发某个任务,更复杂的事情放在任务中处理,这种处理方式叫"中断的延迟处理"(Deferring interrupt processing)
2025-03-16 09:38:33
549
原创 FreeRTOS之软件定时器
指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期(period)指定类型,定时器有两种类型:一次性(One-shot timers):这类定时器启动后,它的回调函数只会被调用一次;可以手工再次启动它,但是不会自动启动它。自动加载定时器(Auto-reload timers ):这类定时器启动后,时间到之后它会自动启动它;这使得回调函数被周期性地调用。运行(Running、Active):运行态的定时器,当指定时间到达之后,它的回调函数会被调用。
2025-03-16 00:30:00
1219
原创 FreeRTOS之任务通知(Task Notifications)
队列、信号量、事件组等等方法时,并不知道对方是谁。使用任务通知时,可以明确指定:通知哪个任务优势使用任务通知来发送事件、数据给某个任务时,效率更高。比队列、信号量、事件组都有大的优势使用其他方法时都要先创建对应的结构体,使用任务通知时无需额外创建结构体,节省内存限制不能发送数据给 ISR,但是 ISR可以使用任务通知的功能,发数据给任务使用队列、信号量、事件组时,数据保存在这些结构体中,其他任务、ISR 都可以访问这些数据。
2025-03-15 13:31:30
844
原创 FreeRTOS之事件组
事件组的每一位表示一个事件每一位事件的含义由我们决定,比如:Bit0 表示用来串口是否就绪,Bit1表示按键是否被按下值为 1 表示事件发生了,值为 0 表示事件没发生一个或多个任务、ISR 都可以去写这些位;一个或多个任务、ISR 都可以去读这些位可以等待某一位、某些位中的任意一个,也可以等待多位的高8位留给内核使用,只能用其他的位来表示事件。
2025-03-15 10:15:00
886
原创 FreeRTOS之互斥量
互斥量也被称为互斥锁用于解决优先级反转的问题信号量实现优先级继承和优先级恢复的功能其实也是信号量,各类操作函数,比如删除、give/take,跟一般是信号量是一样的要注意的是,互斥量不能在 ISR 中使用。
2025-03-14 20:09:30
509
原创 FreeRTOS之信号量
信号量本质上也是一个队列,只不过不涉及数据传输,只涉及数据个数的加加减减,换句话说就是传递状态。使用信号量效率更高、更节省内存分类计数型信号量(Counting Semaphores):量没有限制二进制信号量(Binary Semaphores):量只有 0、1 两个取值支持的动作:"give"给出资源,计数值加 1"take"获得资源,计数值减 1。
2025-03-14 16:54:24
1289
原创 FreeRTOS之队列集
一个任务可能需要从多个不同的数据源接收数据,如果没有队列集,任务需要在多个队列之间进行轮询,可能导致任务在某些情况下无法及时响应。使用队列集,任务可以以阻塞的方式等待这队列中的任意一个有数据到来,而不需要分别对每个队列进行轮询。队列集本质上也是一个队列。
2025-03-12 21:07:19
336
原创 FreeRTOS之队列
在 FreeRTOS 中,队列(Queue)是一种非常重要的通信机制,用于在任务之间、任务与中断服务程序之间传递数据。可以把数据写到队列头部,也可以写到尾部,这些函数有两个版本:在任务中使用、在ISR 中使用。使用 xQueueReceive()函数读队列,读到一个数据后,队列中该数据会被移除。如果队列中没有数据,那么"偷看"时会导致阻塞;一旦队列中有数据,以后每次"偷看"都会成功。如果想让队列中的数据供多方读取,读取时不要移除数据,那么可以使用"窥视"函数有两个版本:在任务中使用、在 ISR 中使用。
2025-03-12 12:08:32
562
原创 FreeRTOS之内存管理
如果想使用这个钩子函数: 在 FreeRTOSConfig.h 中,把configUSE_MALLOC_FAILED_HOOK 定义为 1, 提供 vApplicationMallocFailedHook 函数, pvPortMalloc 失败时,才会调用此函数。返回程序运行过程中,空闲内存容量的最小值。如果分配内存不成功,则返回值为NULL。在 pvPortMalloc 函数内部。作用:分配内存、释放内存。当前还有多少空闲内存。
2025-03-09 16:04:03
338
原创 FreeRTOS概述
这是该架构最高效的数据类型,32 位架构中,它就是 uint32_t,16 位架构中,它就是 uint16_t,8 位架构中,它就是 uint8_t,BaseType_t 通常用作简单的返回值的类型,还有逻辑值,比如 pdTRUE/pdFALSE。宏的名字是大写,可以添加小写的前缀。前缀是用来表示:宏在哪个文件中定义。函数名的前缀有2部分:返回值类型、在哪个文件定义。
2025-03-09 15:27:16
1052
原创 FreeRTOS创建工程
由于,FreeRTOS 的时基使用的是 Systick,而 STM32CubeMX中默认的 HAL 库时基也是 Systick,为了避免可能的冲突,最好将 HAL 库的时基换做其它的硬件定时器配置系统时钟频率。
2025-03-08 18:17:39
154
原创 基于STM32的逻辑分析仪
比如group3里的channe116~channel23都被禁止后,一次采样就可以得到3字节数据,bit16原来对应channel16,现在对应channel24,以此类推。如果禁止group1,需上报3个字节的数据,如果禁止channel2,仍需上报4个字节(组中所有通道都被禁止了,组对应的字节才不需要采集)由于单片机内存小,速度慢,为了实现最高频率采样,采用汇编代码,并且要测量出汇编代码的执行时间,一条汇编指令耗费的时间。它上报的数据是:先上报最后一个采样的数据,最后上报第1个采样点的数据。
2025-03-08 16:16:12
2452
原创 ARM汇编:从RISC指令集到纯汇编点灯实操
MOV 是数据传送指令,作用是将一个值传送到目标寄存器。这里 r0 是目标寄存器,按指令意图是想把 val 这个值传送给 r0。如在 ADD R0, R1, #5 这条指令中, #5 就是立即数,表示将寄存器 R1 中的值与立即数 5 相加,结果存放到寄存器 R0 中。指令助记符 条件码 S 目标操作数,源操作数1,源操作数2。不用判断一个数是不是立即数,使用伪指令即可。risc 指令简单,有以下特点。由risc特点,汇编指令可分为。这些指令凑在一起,称为指令集。
2025-03-04 00:09:29
1213
原创 DMA..
IDLE 中断是串口通信中的一种中断机制。当串口接收线路在一段时间内没有数据传输,即处于空闲状态时,会触发 IDLE 中断。利用这个特性,可以判断一帧数据是否接收完毕。一般情况下DMA接受没有意义,得加上idle中断。
2025-02-27 21:16:30
253
原创 定时器..
RCR:重复计数次数=RCR+1 重复计数结束后触发更新事件 高级定时器才有。PSC降频公式 ➗(PSC+1) PSC∈【0,65535】CNT:上计数 从0计数到与ARR-1溢出 重新计数。通道1,2是一对3,4是一对 间接信号来自对侧通道。捕捉信号变化,将cnt的值拍照保存到ccr中。pwm1多用 pwm2少用 其他基本用不到。Positive-正极性,信号原样输出。Negative-负极性,信号取反输出。通用定时器 tim2到5 9到14。互补输出一般用来驱动mos管。下计数 从ARR-1计到0。
2025-02-18 15:57:08
271
原创 中断...
4比特共16种,0~15 0是最高优先级分为抢占优先级和子优先级二者总比特数为4(抢占优先级-2位 子优先级-2位 抢占优先级-1位 子优先级-3位 等等)
2025-02-17 15:13:55
225
空空如也
怎么扩大keil5代码提示的字体
2025-03-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人