自定义博客皮肤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临界区

任务级函数是在任务中调用,而中断级临界区函数是在中断服务函数中调用,见下图。另外任务机的函数可以嵌套,中断级临界区函数不支持嵌套,见下图2的源代码,任务级临界区是直接操作basepri寄存器,没有++。因为直接开关中断不支持在开关中断之间的代码里再次执行开关中断的嵌套处理,比如当前代码关闭中断,嵌套了一个含有开关中断的临界区代码后,退出时中断就成开的了,就出问题。什么是临界区:指必须完整运行的区域,即这个区域的代码不能被打断,必须完整运行,如通信协议就不能被打断(IIC、SPI等)。

2024-12-09 16:08:14 185

原创 FreeRTOS中断优先级配置

FreeRTOS和裸机中的中断说明:之前刚学习FreeRTOS时,在中断优先级配置这里迷糊,搞不懂和裸机的中断有什么区别,裸机是程序设计者设定好中断优先级,而FreeRTOS是设定好0~15级的中断优先级,好多到好多是FreeRTOS控制,另外的不受FreeRTOS控制,比如设定优先级高于5的不受FreeRTOS控制,即0~4不受控制,5~15受FreeRTOS控制,某段程序我调用FreeRTOS中的关中断API函数,对0~4优先级的程序就无效。用来配置FreeRTOS可以管理的优先级中断。

2024-12-09 15:10:26 1048

原创 FreeRTOS---任务调度

举例:任务T1,任务T2,任务T3,分别放于pxReadyTasksLists[31],pxReadyTasksLists[30],pxReadyTasksLists[29],T1因放于31位置,优先级最高,所以运行态任务执行完,去就绪态列表取任务时,会优先取优先级高的,这里取T1,那怎么知道31中有没有数据呢,就通过一个32位变量,如果对应位为1就表示有数据,见下图:如果bit31有数据,bit31就为1,然后去pxReadyTasksLists[31]中取。1.运行态:正在执行的任务就是处于运行态。

2024-12-02 15:45:18 311

原创 LCD屏幕

先读取参数2中D0~D15的值保存在r中,r&0xFF相当于把G1的值保存在g,其它位清0,0xFF可看成0000 0000 1111 1111,接下来(r>>11)<<11右移11位,把D11-D15向右移动11位,再左移11位相当于清空了D0~D10位。设置X和Y轴坐标,这里用的屏幕是240*320像素,所以X轴范围0~239,Y轴范围0~319(因为从0开始算的,不是从1开始,所以要减1),单片机不知道屏幕尺寸,所以需要设置XY轴。LCD屏一般使用8080时序控制,实现数据写入和读取。

2024-11-27 16:34:24 461

原创 内存保护单元MPU

MPU可配置保护8/16个内存区域(F7是8个,H7是16个(从region0~region15,region-1为官方默认 )),每个区域最小要求256字节,每个区域又可以配置为8个子区域(以H7为例:最多可分配为16*8 = 128个区域),内存区域的优先级regionX,X越大,优先级越高,region5>region4。(H7的cache速度和主频一样480M,相当于和CPU速度一样,而SRAM只有240Mhz),Cache支持4种基本操作:1.使能;情况1:Cache已变化,SRAM数据未更新?

2024-11-26 16:44:01 840

原创 OLED显示屏

步骤:1.先选择DC是命令还是数据,2.拉低CS片选信号,选中SSD1306,3.拉低WR,使能向OLED写入数据,4.D[7:0]准备数据,WR在低电平向高电平变化时读取D[7:0]数据,5.WR拉高,读取数据,数据被写入1306芯片中,6.初始化:释放片选CS,RD保持高电平(低是读取OLED数据,高就是失能)上图设置页地址后,需要同步发送要设置的列地址L4和H4,这3个是一起的,L4是1字节的低4位,H4是1字节的高4位,设置列地址是分开的,按理来说只需要1个字节可设置完,但厂家是这样设计的。

2024-11-26 15:05:56 1869

原创 IWDG独立看门狗

1.递减的计数器、2.时钟由独立的RC振荡器提供(不是来自主时钟HSE和HSI),可在待机和停止模式下运行、3.看门狗激活,当递减计数器计数到0x000时产生复位。1.HAL_IWDG_Init():对应寄存器的步骤1-5,取消PR/RLR寄存器写保护,设置IWDG预分频系数和重装载值,启动IWDG。异常,导致程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行。计数器计数到0之前,重装载计数器的值,防止复位(如重装载值是2000,递减到0之前这段时间,把2000又重装,就不会到0)。

2024-11-24 20:10:09 374

原创 stm32系统滴答定时器SysTick

Tick就是滴答定时器的缩写,SysTick即系统滴答定时器,包含在M3/4/7内核里面,核心是一个24位递减计数器(2^24次方,即可以计16777216个数),每来一个时钟电平脉冲就减1。时钟源通过1或8分频到VAL,每来一个时钟电平信号,VAL减1,减到0时,硬件让COUNTFLAG位置1,然后重装载寄存器把值给VAL,开始新一轮递减。TICKINT滴答定时器中断位,置1使能滴答定时器中断,0不使能中断;ENABLE使能位,开启滴答定时器工作。H7系列来自于SYS_d1cpre_ck。

2024-11-16 21:42:21 398

原创 STC8G1K08单片机项目

该项目通过单片机控制按键、RTC、ADC、开关机重启、激光灯,现将代码分享给大家,需要可参考,此部分代码已经验证功能并进行样机测试,可放心使用。IO配置,可使用stc官方stc-isp-v6.93B.exe程序中IO口配置工具进行配置,很方便。RTC采用dapu的芯片,采用软件IIC通讯,这部分后续上传。以上代码由于项目时间很紧,不规范。uart.c(采用状态标志方式,因为通信数据不多,如果多可以采用环形buff方式)

2024-11-11 10:18:35 894 1

原创 stm32 DMA学习笔记

绿色框为Flash和SRAM存储器,通过以上框图就可以知道DMA用于存储器和外设(蓝框和绿框),存储器到存储器数据转运(2个绿框之间),即外设到存储器,存储器到外设,存储器到存储器(Flash到SRAM)的转运操作。自动重装器:当传输计数器减到0,是否要自动恢复到最初的值,如传输计数器为5,减到0后,如果不使能自动重装器就停止DMA转运,如果使能,传输计数器又变成5,比如转运一个数组,只需要转运一轮就结束,就可以关闭自动重装器,如果是ADC扫描模式+连续转换,就需要一轮转运结束立刻开始下一轮。

2024-10-09 21:39:37 1541

原创 stm32 ADC笔记

框1和框2:触发源,前者是规则组的触发源,后者是注入的触发源,都是硬件触发, 触发的作用是让ADC开始转换,可在ADC初始化结构体进行选择(见下图)。a.规则通道数据寄存器用于保存ADC转换结果,只有1个,但是对应了最多16个通道的ADC转换结果,如果数据读取不及时,容易出现数据覆盖问题,所以这个寄存器常配合DMA使用,快速搬移数据,防止覆盖,该寄存器输入为模数转换器的规则通道,输入为ADC转换结果。4.连续转换,扫描模式:指定通道数目为7,将序列1-7转换完置EOC标志,自动开始下一次转换。

2024-09-27 13:27:40 1607

原创 stm32输入捕获理解

上图红框为IC的框图,最左边TIMx_CH1/2/3/4为4个通道引脚,异或门的输入接到通道1/2/3,当1/2/3输入引脚有任何一个引脚电平翻转,那么异或门就会产生一次电平翻转,输出通过数据选择器(梯形)到达输入捕获通道1,如果数据选择器选择上面异或门输出,那么TI1就是CH1/2/3共3个通道异或值,选择下面异或门就没用,异或门主要用于三相无刷电机。即可以让通道1的信号输入到通道2,通道2进来的信号也可以输入到通道1,还有个作用就是把1个引脚输入同时映射到2个通道,便于同时测量周期和占空比。

2024-09-25 17:24:20 457

原创 stm32输出pwm波理解

上图红色线为一个PWM波时间,那么其倒数就是PWM频率,从上面可以看出来PWM波频率其实就是计数器从0计数到ARR的时间倒数,CNT从0计到ARR的时间计算:假设时钟源频率CM_PSC=72m,分频系数为PSC=1,那么计一个数是2/72000000(因为PSC是0代表1,1代表2,ARR也是同理),ARR = 100,计ARR个数就是2*100/72000000时间,频率等于72000000/2*100,即PWM频率=CK_PSC/(PSC+1)*(ARR+1)。下图为通用定时器框图中紫色框放大图。

2024-09-25 10:50:49 595

原创 STM32F1定时器学习笔记(标准库)

文章内容不完善,不停更新中

2024-08-12 12:18:14 2017

原创 STM32串口学习理解(通俗易懂)

2.来到图片中间位置,发送器和接收器控制主要用于控制发送移位寄存器、接收移位寄存器的工作,以及各种标志位控制,硬件数据流控等(什么是硬件数据流控:假如发送的很快,接收来不及接收,会导致后面发的数据丢失,为了避免这个问题,增加了这个器件,发送端发完数据,接收端接收完成通过一根线告诉发送我接收完了,继续发,就不会出现数据接收不完丢失问题),控制器这里有多条线,我们关注主要的收发数据控制这里,即图中绿色线。今天再一次学习stm32,比之前学习感觉思路清晰一些了,先来看看串口的框图,上图从下往上看。

2024-07-13 22:22:49 581 1

嵌入式 STC8G1K08单片机

通过STC8G1K08单片机控制按键、激光灯、开关机重启、ADC、RTC等源代码

2024-11-11

空空如也

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

TA关注的人

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