自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 FreeRTOS 任务调度解读

注意:各个任务的栈是相互独立的,中断函数的栈也是独立于各任务的。找到taskA的栈指针(taskA_TCB.pxTopOfStack),然后手动 从 taskA 的栈中把 R4~R11 加载到 CPU对应寄存器(加载完后taskA的栈指针需更新),然后更新 寄存器PSP = taskA的栈指针,最后。OS确定第一个运行的任务taskA:启动调度器前,taskA在创建的任务中优先级最高(假设为max_priority),且在优先级为max_priority的那一批任务中,taskA是最后一个创建的任务。

2024-10-06 19:47:09 1362

原创 STM32外设地图-I2C

软件置位START标志,然后等待 SB标志置位,等到后,软件把从机地址写入 I2C_DR,然后等待 ADDR标志置位,等到后,软件清零ADDR标志(若只接收1Byte数据,则此时软件 清零ACK标志 并置位STOP标志),后面每次等RXNE标志置位时 软件从I2C_DR 读1字节数据,当读完倒数第二字节时,软件清零ACK标志 并置位STOP标志,当读完最后一字节时,软件等待 STOP标志清零,等STOP标志清零后,接收结束。在SCL高电平期间,禁止改变SDA的值)在SCL高电平期间,禁止改变SDA的值)

2024-10-03 23:25:57 1214

原创 STM32外设地图-SPI

此时若最后1字节数据已接收成功(数据已保存在rcv_buf),则:等待TXE = 1(有超时判断),等TXE = 1(或等待超时)后,再等待BSY = 0(有超时判断),等BSY = 0(或等待超时)时传输结束,若等待超时则调用“,此时若最后1字节数据已写入SPI_DR,则:等待TXE = 1(有超时判断),等TXE = 1(或等待超时)后,再等待BSY = 0(有超时判断),等BSY = 0(或等待超时)时传输结束,若等待超时则调用“----线程A挂起等待完成量cpt;

2024-09-27 13:33:22 1000

原创 rtthread SPI驱动解读

参考资料[1][2]

2024-09-16 14:27:59 395

原创 rtthread I2C驱动解读

参考资料[1][2]

2024-09-16 14:18:07 356

原创 rtthread CAN驱动解读

线程A 获取 tx_fifo互斥量(永久等待),从 链表freelist 取出首节点 sndbxinx_list_X 并找到与其绑定的 TX Mailbox_X,接着把报文写到 TX Mailbox_X 并请求发送此邮箱(若无法发送则把节点sndbxinx_list_X 重新插入 链表freelist,并释放 tx_fifo互斥量 ,然后返回线程A),然后永久等待完成量“sndbxinx_list_X.completion”…线程A 通过设置 msg.priv 告诉驱动用哪个发送邮箱发送。

2024-09-16 12:28:37 1508

原创 rtthread 串口驱动解读

1][2]

2024-09-16 00:53:27 372

原创 STM32外设地图-CAN

先把第一帧报文写入空闲的 TX Mailbox_X(发送邮箱有3个) 并请求CAN1发送此邮箱(置位 邮箱对应的TXRQ标志),剩下的报文缓存到buff中, TX Mailbox_X 发送完成后(发送成功 or 因没有接收节点ACK而发送失败),RQCP_X标志置位并触发CAN1_TX中断,在CAN1_TX中断函数中,从缓存buff中取出一帧报文 并写入 TX Mailbox_X,然后请求CAN1发送此邮箱。这种方式的优点是软件可以控制恢复时间,避免恢复太快的问题,缺点是需要软件做额外的工作。

2024-09-15 17:48:43 1452

原创 STM32外设地图-UART

此方式的缺点是,不能确定最后一个字节何时发完。

2024-09-15 15:29:26 1782

原创 STM32外设地图-Timer

使用CC1和 CC2通道测量输入PWM波形的频率和占空比时,CC1通道采样PWM上升沿,CC2通道采样PWM下降沿,Slave mode为Reset mode 并选择 CC1通道的信号为 TRGI,当CC1通道发生捕获时,TRGI信号会置位UG标志,此时如果UIE标志为1,则会触发 Update interrupt,换句话说,每次CC1通道发生捕获,都会触发Update interrupt,结果就是CPU会频繁响应Update interrupt。配置计数器为Upcounting mode,循环模式。

2024-09-15 13:25:48 1335

原创 STM32外设地图-ADC

​② DMA中断周期(dma缓存更新周期): 若dma缓存只能保存一次循环的数据,则ADC Scan完一次时,DMA立刻触发中断,DMA中断周期为 21us ~ 336us;PS:如果 DMA channel传输完成时 需触发DMA channel中断,可考虑把ADC配置为 多通道单次采样,并把 regular group的外部触发配置为定时器触发,这样可以用定时器周期性启动 regular group 采样,进而控制DMA中断周期,就不用通过 加大dma缓存 来延长DMA中断周期。

2024-09-15 11:39:12 1078

原创 STM32外设地图-DMA

3、在DMA传输过半中断、DMA传输完成中断、IDLE中断的中断函数中,计算DMA写入接收环形缓存的数据字节数并更新环形缓存的状态。在IDLE中断的中断函数中,调用接收回调函数把收到的数据长度告诉任务A。peripheral:起始地址为UART1寄存器RDR地址,地址不增加,单数据长度为1字节;memory:起始地址为 接收环形缓存起始地址,地址增加,单数据长度为1字节;使能DMA channel的传输过半中断、传输完成中断;最后使能UART的DMA接收模式。2、使能UART的IDLE中断。

2024-09-15 00:56:01 565

原创 STM32外设地图-GPIO和AFIO

​ PS: 如果软件在运行时修改了PA13、PA14的配置,导致MCU复位后,无法用Jlink下载程序或无法用Jlink调试程序,可以先修改软件,取消软件对PA13、PA14的配置(让其保持复位默认状态),然后用导线手动拉低NRST引脚使MCU处于复位状态,然后在下载程序的同时,手动释放NRST引脚。③ pin为AFIO时,外设A是否需要引脚重映射:在STM32F103中,当外设A属于 pin 的 “Remap外设”时,软件需要控制外设A执行引脚重映射;部分重映射:外设A的部分引脚重映射。

2024-09-14 18:23:18 1224

原创 CortexM3内核外设-Systick

PS:库函数会选择FCLK作为Systick时钟,并启动SysTick,同时设置Systick中断优先级为最低,并使能Systick中断。1、编写Systick中断服务函数并添加到中断向量表中:SysTick_Handler()

2024-09-14 17:34:50 362

原创 CortexM3内核外设-NVIC

根据全局的优先级分组(即PRIGROUP的值),每个中断的8bit的优先级(STM32只用了高4bit)被拆分成抢占优先级、响应优先级。(中断服务函数指针,长度为4Byte):当NVIC确定要响应中断X时,NVIC先根据中断向量表地址(VTOR寄存器的值,此寄存器值可通过软件修改)找到中断向量表,然后根据中断X的中断编号,从中断向量表中找到与之对应的向量(中断服务函数指针),最后让CPU去运行其中断服务函数。:若中断0、中断1同时触发,此时CPU响应了中断0,则未能被响应的中断1的挂起标志将置位;

2024-09-14 16:50:15 1249

空空如也

空空如也

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

TA关注的人

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