自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TI公司申请软件Controlsuit和C2000Ware

最保险的方法是用谷歌邮箱注册,注册学校和邮编用哈佛的,直接百度哈佛,对了最好翻墙,挂个美国地址。这样你就是哈佛的了。反正我用了哈佛登陆的很流畅,包括申请啥的,直接下载了,咱也不知道是不是哈佛原因。注册不了,验证码收不到只能说明一件事就是你的邮箱不好用,不要用学校或者qq邮箱,qq邮箱会提示你,学校邮箱又可能把ti的验证码放到垃圾箱里。如果出现注册不了、验证码收不到的情况那你还得回来看看我写的东西。这两个就是官网网址,或者直接在官网搜索就行。然后用这位大佬的方式安装就行。但是不出意外的话就会出现意外。

2025-04-01 10:29:40 289

原创 __HAL_LINKDMA是什么具体解释他的作用和用法

是STM32 HAL库中的一个宏,用于将外设(如SPI、UART、ADC等)与其对应的DMA句柄关联起来。它的作用是建立外设与DMA通道之间的连接,确保外设在进行DMA传输时能够正确使用指定的DMA资源。当外设需要利用DMA进行数据传输时,必须明确指定使用哪个DMA通道或流。通过将外设句柄中的DMA相关字段指向具体的DMA句柄,实现两者的绑定。对于支持双向传输的外设(如UART的发送和接收),可以分别关联发送和接收的DMA句柄,确保发送和接收使用独立的DMA通道。HAL库的DMA传输函数(如。

2025-03-25 22:01:28 331

原创 4.DSP--ADC

adc有两个独立的8状态排序器SEQ1,2,一个16级联状态排序器SEQ,意味着可以在一个8状态排序器中任意选择一个采集,每次收到触发源请求SOC后开始转换,有级联和双排序两种方式,级联触发源单一,双排序可以有两种。相当于一个砝码20g,由4位adc比较,最高位置1为16g,次高位8g,第3位4g,第4位为2g,那么自然是最高位+第3位,1010.同步中最高位无效,因为选择通道a,b通道一致,必须同时为ADCINB4,ADCINA4,不能一个5一个4;采样:采集此时的模拟电平。采样,保持,量化,转码。

2025-03-23 17:51:16 486

原创 1.dsp————exti外部中断

图中可以看到所有中断,出来tim1,2,意外都需要pie先选择INTX.1~8,使能中断标志位IFR和中断允许位IER,然后是使能cpu中断INTX1~12位,IFR,IER。对于外部中断而言,总共有12*8种96个中断,但其中有58个有用,另外中断INT13,INT14对应着tim1,tim2.中断就是相当于程序执行a程序时,突然触发中断到程序b,等程序b结束,继续执行a的程序。这里有一点,tim1是PieVectTable中断内xint13。应答1~12INTX组,用于中断函数内=1后清除。

2025-03-23 14:12:23 901

原创 2.dsp--time定时器

假如tddr=100,也就是时钟周期为1/0.15mhz=0.667us,psc=100,也就是1/150mhz=0.00667us,乘100为0.667us。说到底就是tddr是分屏值,直接就是150mhz/(tddr+1),而psc才是实际执行者,psc=tddr,1/150mhz*psc才是一个周期,分屏值tddr是分频频率,psc负责累加系统周期到目标周期。如:tddr=150,150mhz分频后为150为1mhz,时钟从0.00667us到1us。tim重装prd值,用于定时中断。

2025-03-22 19:24:57 284

原创 6.DSP------SPI

SPIBRR:spi时钟不能超过lspclk的1/4,所以brr=0,1,2是spiclk=lspclk/4,brr=3~127时spiclk=lspclk/brr+1.lspclk=37.5mhz。相信大家已经练出来,必然是先0x000f再0x009f,软件复位必须的,然后就是自测,最后就是最大字符长度。比如cpol=0,cpha=0:第一个跳变沿,由低到高有效,第一个跳变沿内采样,第二个跳变沿输出。设置fifo增强,消除置位,重新使能。miso,主机输入从机输出,cs为片选线,为1为主机,0为从机。

2025-03-20 22:06:30 171

原创 7.dsp-----iic

这就是iic的多机通讯方式,scl控制时序,sda负责数据传输,这俩接上拉电阻,这样空闲时呈高组态,不会受到干扰,想想一下,如果接gnd,附近有电磁干扰,岂不是有误操作。模拟就是模拟iic时序,硬件就是用iic芯片,但是iic芯片一般不用,据说是不好用,有问题,咱也没用过。不得不说发明者很巧妙的构思。这就是正常的iic时序,需要先写sda置位1,再scl拉高,,只有scl信号低位,sda信号才能变化。可以看到这三种信号先起始,从机地址后选择读写操作,应答后读写数据,当从机非应答后,只能由主机停止。

2025-03-20 15:17:35 381

原创 5.1对普中sci发送回显优化

原理就是设置一个数组缓冲区,rx内没接收到就一直等待,一旦有字符但是小于数组最大值,就可以保存在数组内,检测到回车\0d,自动添加\0,发送出来,并且将数组大索引归0,下次覆盖。在写普中的sci回显的时候发现,这个回显函数只能回显一个字符,且未知原因卡死,实在是damn,damn,damn,所以做了优化,可以一次发送大量的数据回显。

2025-03-19 21:55:12 177 1

原创 5.RS232--sci---usart

cpu写入程序--->SCITXBUF(写入scitxbuf后RXRDY为0)---->RXENA-------->RXSHF--------->TX。RX-------->RXSHF------>RXENA---->SCIRXBUF(RXRDY置1表接收,读取SCIRXBUF内数据后自动清除)rs232通常遵循96-8-n-1格式,9800波特率,8个数据位,1个停止位,其实这一点与usart相似。传送完成以后 RXRDY。接收-----》移位寄存器--》标志位1使能(相当于开关)--》接收缓冲器。

2025-03-19 21:05:39 641

原创 3.dsp——epwm笔记

时基模块TB设置基础时钟及pwm的初始化,比较模块CC是比较寄存器AB内的值,相等时则可以进入动作模块AQ设置pwm占空比,最后设置事件触发。还是为了避免自己忘,damn,为啥我不是机器人,这样就能记住了,至于标题为什么从3.dsp--epwm写,因为我也不知道,damn。这就是同步信号,第一个就是同步信号下,phsdir=0向下计数,即时钟到了synci出现上升沿,直接从tbphs出向下计数,图二为phsdir=1.这是设置在0,prd,cau,cad,cbd,cdu这几个地方pwm的置1还是0。

2025-03-18 21:50:06 487

原创 同步与异步

异步操作允许某些任务在后台执行,而不会阻塞后续代码的执行。这意味着如果有一个耗时的操作(如网络请求或大数据处理),后续的代码将被阻塞,直到该操作完成。例如,如果一个同步的网络请求需要5秒才能完成,那么在这5秒内,整个程序都将被阻塞,无法响应用户的其他操作。由于异步操作不会阻塞后续代码的执行,因此它们非常适合处理耗时任务,如网络请求、文件I/O等。在异步操作中,程序可以继续执行其他任务,同时等待异步操作的完成。但是如果是说在前端开发中,同步和异步,它们在处理任务、操作以及与其他系统的交互方式上有显著的区别。

2025-03-18 15:27:23 188

原创 关于not a genuine ST device问题

上面串口下载hex文件如果第一次成功,但是第二次再次下载其他hex文件时失败,那只有一个原因,就是你下载的串口频率有问题。比如第一次串口下载的hex程序文件里面是1152000(按照一般的串口频率),但是你下载软件的串口设置115200,那就又问题了。首先连接boot0到3.3v,然后利用串口下载程序,也就是hex文件下载,正常是可以下载的,然后把boot0连接GND。串口下载hex文件的串口频率为上次你下载的串口频率,如果你不确定最好把所有你用过的频率都试试。当然这是排除掉板子烧坏的原因。

2025-02-28 16:38:49 216

原创 电角度和机械角度

假设极对数为2,也就是有两个n两个s呈+型排列,上下为n,左右为s,同一个地方检测到n极只需要旋转180度,但是编码器觉得检测到两次n信号那就是旋转了一圈360度。180就是机械角度,360就是电角度。假设极对数为3,那就是3个n3个s呈米字型排列,Y三个端点为n,倒Y为s,同一个地方检测n极只需120度,但是编码器觉得转了一圈360。假设极对数为1,也就是说旋转360度才能一圈,同一个地方检测到n极需要360度。电角度=极对数*机械角度。

2024-12-16 11:40:50 397

原创 12.内存管理

内存块地址由高到低(不是内存大小),找到第一个满足的内存块,剩下的与。内存碎片:最适应算法后,剩余空闲空间很小,既不能合并又不能利用。允许申请和释放内存,并且能够合并相邻的空闲内存块,减少内存碎片的产生。最适宜算法:最小且能满足的内存。允许申请和释放内存,但不能合并相邻的空闲内存块。后面的合并减少内存碎片。最简单,只允许申请内存,不允许释放内存。能够管理多个非连续内存区域的。

2024-11-07 15:05:32 122

原创 11.队列集

队列不能有有效数据,即空队列才能添加到队列集,移除也是。队列集可以添加队列也可以添加计数型,二值互斥信号量。

2024-11-07 14:55:44 109

原创 10.事件标志

任意任务和中断都可以读写这些位,高8位用于存储控制信息,剩余为表示事件标志,1为发生0为未发生,只要条件满足可以唤醒所有符合条件的任务。

2024-11-07 10:40:00 115

原创 9.任务通知。

不覆盖接受任务通知 模拟队列。ulTaskNotifyTake设置为pdFALSE为计数型递减,pdTURE为二值型。更新接受任务通知一个或多个bit 事件标志组。但无法发送数据给中断ISR,ISP可以使用任务通知发送数据给任务。无法广播给多个任务,只能指定一个任务接受并处理。发送可用于任务和中断,接受只能用于任务。效率更高,内存更小,不需要创建结构体。

2024-11-06 17:37:55 228

原创 8.队列queue

代码中先定义buff数组,然后定义一个指针buf,用于存储字符串存储地址,buf=&buff【0】,buf获取buff地址,所以 key2= xQueueSend(queue_task2,&buf,portMAX_DELAY );在我个人理解就是队列相当于能容纳多少信息的集合,可以先入先出(xQueueSend尾部写入队列后xQueueReceive接受信息后删除),也可以后入先出(xQueueToFront头部写入xQueueReceive接受信息后删除)。

2024-11-05 20:09:01 199

原创 7.软件定时

从名字就可以知道,单次定时就是定时一次结束,而周期就是这一周期定时结束继续下一周期定时。软件定时是freertos自带的,有单次和周期之分。除了自带的硬件定时以外还有个软件定时。

2024-11-01 17:07:44 243

原创 6.信号量

但是它会有优先级翻转的问题,比如说如果take为高优先级,give为低优先级,此时为0,那就回=会导致高优先级的take无法-1,导致阻塞,反而使得give这个低优先级更像高优先级一样,必须等give运行。互斥型和二值型差不多,但是互斥型可以避免优先级问题,叫优先级继承,当高优先级的阻塞时但是需要运行低优先级,由于中优先级的捣乱无法运行,就可以把低优先级抬高到高优先级。所谓二值信号量就是当获取信号量时,内部空间就会-1,释放信号量时内部空间+1,而刚创建时一般为0。

2024-11-01 16:08:02 164

原创 5.时间片轮转

define configTICK_RATE_HZ (1000) //时钟节拍频率,这里设置为1000,周期就是1ms。保护程序顺利运行,不然会导致运行到一半时间片结束就会运行下一个任务。时间片轮转功能就是同意优先级下在一段时间周期下运行,如果在时间片下运行时间到了就会依次运行下一任务,前一个任务就是挂起状态。时间片时间靠这个设置,设置1000hz就是1/1000为1ms,如果设置500ms只需要设置为2就行。

2024-10-30 16:51:08 255

原创 4.列表与列表项

列表项是按升序来的,也就是说xitemvalue越大也靠后,但是同时创建列表时会默认创建一个末尾列表项0xFFFFFFFF同时末尾列表项不算在uxnumber of item里。TestList->xListEnd->pxNext 0x200000d8//末尾列表项下一个就是列表项1。可以看到末尾列表项前一个是列表项3后一个是列表项1,而列表项3前一项是列表项2,后一个是末尾列表项。列表索引指向末尾列表项0x200000cc 按程序排列应该是列表项132和末尾列表项。第2步列表项1的位置。

2024-10-30 15:13:11 313

原创 3.挂起和恢复

这是rtos的运行图,所有需要运行的程序都要先就绪,运行到就绪就是由于高优先级的抢占,就绪到挂起就是vTaskSuspend,挂起到就绪就是vTaskResume,阻塞时间到了就会就绪。vTaskSuspend挂起和vTaskResume恢复,返回值为pdTRUE和pdFALSE,一旦任务挂起,就需要向高优先级或时间片进行轮转。

2024-10-30 10:39:44 105

原创 3.vTaskDelay和xTaskDelayUntil

xTaskDelayUntil的定义就是延迟时间=*pxPreviousWakeTime + xTimeIncrement;也就是说从程序某一位置开始xTaskGetTickCount获取时间开始到延时结束的时间为xTimeIncrement时间。vTaskDelay是绝对延时时间,即从此刻到延时结束时间。xTaskDelayUntil是相对延时时间,

2024-10-29 16:45:42 382

原创 1.静态创建

然后开启vTaskStartScheduler开启调度。一般还需要加入taskENTER_CRITICAL和taskEXIT_CRITICAL进入和退出临界区,临界区是为了保护内部程序运行的。还要实现两个接口函数vApplicationGetIdleTaskMenmory和vAppLicationGetTimerTaskMemory。静态创建完整代码如图。

2024-10-29 16:13:27 210

原创 2.中断管理

假设在freertos中设置两个定时器中断,一个优先级4,一个优先级6,如果关闭中断,优先级6的应该无法运行,开启中断优先级6才能运行,而优先级4的不受监管。由上可知,我们能管理的系统中断限于5之后,系统中断数字越小,优先级越高,而freertos相反。同时系统不能有子优先级还得保住中断优先级16(0~15)个,所以需要设置优先级分组为。500ms中断一次,所以运行结果如图。在freertos里可以设置自己的。

2024-10-28 18:26:30 283

原创 printf符号

printf符号

2024-10-23 17:12:33 159

原创 正点原子FREERTOS中断恢复的大坑

在这个代码中可以看到delay_ms被注释掉了,本来是用来按键消抖的,但是偏偏他就是导致taskSELECT_HIGHEST_PRIORITY_TASK();

2024-10-14 10:58:53 186

空空如也

空空如也

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

TA关注的人

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