- 博客(21)
- 收藏
- 关注
原创 FreeRTOS任务管理
调度器将始终选择能够运行的优先级最高的任务,Task2的优先级比Task1高,并且始终能够运行,因此Task2是唯一一个进入运行状态的任务,由于Task1从未进入过Running状态,所以它从未打印出其字符,任务1也被称为“饥饿”。在此之前,创建的任务总是有进程要处理,从不需要等待,它们不需要等待任何的事情,所以它们总是能进入运行状态,但这种持续处理的任务用处有限,因为它们只能以最低优先级创建,如果它们在更高的优先级运行,它们将阻止优先级较低的任务运行。
2024-01-24 15:53:03
920
1
原创 HONG-看门狗—IWDG&窗口看门狗—WWDG
②计数:窗口看门狗的计数器是一个7位的递减计数器,计数最大值为0x7F(01111111)(127),当计数器递减到0x3F(00111111)(63)时,就会产生一个复位信号,重启整个系统。②计数:独立看门狗的计数器是一个12位的递减计数器,计数最大值为0xFFF,当计数器递减到0时,就会产生一个复位信号,重启整个系统。如果在递减到0之前,将重装载数值写入递减计数器,就会由重装载数值开始递减到0,如此反复,就永远不会到0,也就不会产生复位信号,这个重装载计数值写入递减计数器的过程叫”喂狗“。
2023-12-11 17:44:13
817
1
原创 HONG-定时器us延时
STM32F1系列共用8个定时器,2个基本定时器(TIM6、TIM7)、4个通用定时器(TIM2、TIM3、TIM4、TIM5)、2个高级定时器(TIM1、TIM8),高级定时器主要用于电机控制。①时钟源:通用定时器的时钟源有四个,分别为内部时钟(CK_INT)、外部触发输入(ETR)、内部触发输入(ITRx,x=0~3)、外部捕获引脚(TixFPy,x=1 ~4,y=1 ~2)。编码器解耦用于编码器计数。③计数核心:包含三个寄存器:预分频器(PSC)、计数器(CNT)、自动装载寄存器(ARR)。
2023-12-06 17:08:22
872
1
原创 HONG-DMA
Direct Memory Access直接内存访问,如果把外设A的数据,传给外设B,这种情况起始不需要CPU一直参与,只需要A、B之间创建个通道,让它们自己传输即可,DMA设计的目的就是减少大量数据转移指令消耗CPU,DMA专注数据转移,CPU专注计算、控制。外设向DMA控制器发送请求后,DMA控制器根据通道优先级依次处理请求,当轮到该外设时,返回应答信号给该外设,该外设收到应答信号,释放该请求,进行DMA数据传输,直至DMA传输结束;初始化完成后,使用“HAL_DMA_Start_IT()”启动传输。
2023-12-04 15:20:11
858
原创 HONGIIC
SCL引脚为时钟信号,始终为输出模式,SDA引脚为数据引脚,可能为输出或者输入,因此还需要编写函数实现输入、输出的切换。SDA线上的数据必须在时钟的高电平周期保持稳定,数据线的高或低电平状态只有在SCL线的时钟信号是低电平时才能改变(低电平时改变电平,高电平保持稳定以写入电平)因为IIC的SCL和SDA都需要接上拉电阻,保证空闲状态的稳定性,所以IIC总线早空闲状态下的SCL和SDL都保持高电平。IIC每次传输8位数据也就是一个字节,需要从机反馈一个应答信号,确认从机是否正常接收了数据。
2023-11-28 15:49:57
807
原创 串口通信概念
HAL_UART_Init()”会调用“HAL_UART_MspInit()”,从而实现对涉及的硬件初始化,用户需要覆写(HAL库提供函数名,函数内容需要自己编写)该函数,完成使能串口时钟、初始化TX/RX的引脚、设置USART1的中断优先级且使能中断等。左边Tx/Rx Baudrate为波特率,“f_PCLK”为该外设USART的时钟频率,“USARTDIV”为USART_BRR寄存器的值。协议部分:如USART的波特率、奇偶校验、停止位等,通过“HAL_UART_Init()”设置。
2023-11-20 17:15:18
48
1
原创 HONG从创建模板到LED、时钟系统、中断系统、SysTick、按键轮询、按键中断、蜂鸣器
在C语言中可以使用枚举类型声明符号名称来表示整型常量,使用enum关键字可以创建一个新的“类型”并指定它可具有的值(实际上,enum常量是int类型,因此只要能使用int类型的地方就可以使用枚举类型)。在C语言中当使用volatile修饰一个变量时即表示这个变量的值随时都有可能发生改变,因此编译器在编译的时候对该变量的存取操作不能进行优化,即告诉编译器每次存取该变量的时候都要从内存中去存取而不是使用其之前在寄存器中的备份。如果只给一个枚举常量赋值,没有对后面的枚举常量赋值,那么后面的常量会被赋予后续的值。
2023-11-15 18:23:07
47
原创 HONG蜂鸣器
通常蜂鸣器需要的驱动电流比较大,使用GPIO直接驱动蜂鸣器比较吃力,。由GPIO控制三极管通断,蜂鸣器由系统电源驱动,MCU只需要很小的电流便可控制蜂鸣器。Q1为NPN三极管,发射极(E)接地,基极(B)接单片机引脚PA8,集电极(C)接蜂鸣器到电源。当PA8输出低电平,UBE<Uon,三极管断开,此时蜂鸣器不工作。当PA8输出高电平,UBE>Uon,三极管导通,此时蜂鸣器工作。第二步:配置GPIO结构体:Pin引脚、Mode模式、Pull上拉或者推挽、Speed速度。第一步:使能蜂鸣器时钟。
2023-11-14 17:49:54
25
原创 HONG按键中断
初始化每个按键对应的GPIO,“HAL_GPIO_Init()”里会判断该引脚是否为EXTI模式,如果是则调用“__HAL_RCC_AFIO_CLK_ENABLE()”使能AFIO时钟;当中断发生后,则自动跳到中断向量表(startup.stm32f103xe.s)中所对应的中断函数所在位置,执行中断函数的内容。每个中断处理函数里,都调用的“HAL_GPIO_EXTI_IRQHandler()”准备后续处理,传入参数为外部中断的引脚号。Step2:系统时钟配置SystemClock_Config();
2023-11-14 16:46:46
29
原创 HONGGPIO按键轮询
其意思是:如果表达式1为真,则运算表达式2,整个条件表达式的值为 表达式2的值;反之,则运算表达式3,整个条件表达式的值为表达式3的值。第一步使能时钟:使能时钟的函数是__HAL_RCC_GPOIx_CLK_ENABLE()输出功能呢也就是读取GPIO电平,之前的控制LED灯其实是输出高低电平。1.定义一个全局变量标志位“up_flag”,作为UP键被按下的标志。PUSH_DOWN也是一个宏定义,用来按键引脚状态定义。4.KEY_UP是一个宏定义,是用来读取按键状态。表达式2 : 表达式3。
2023-11-13 17:54:45
33
原创 HONGSysTick定时器
这里我们先进到HAL_SYSTICK_Config配置SysTick的初始值。Step4.是SystickInit:系统滴答定时器初始化。在进入SysTick_Config函数。Step1.是HAL库初始化。Step2.是系统时钟初始化。Step3.是检验时钟频率。
2023-11-13 12:53:47
24
原创 HONG中断系统
当两个中断的抢占优先级相同时,即这两个中断将没有嵌套关系,当一个中断到来后,若此时CPU正在处理另一个中断,则这个后到来的中断就要等到前一个中断处理函数处理完毕后才能被处理,当这两个中断同时到达,则中断控制器会根据它们的子优先级决定先处理哪个。设置完优先级分组后就可以设置抢占优先级和子优先级了,假设将优先级分组PRIGROUP设为2,此时每个中断可设置抢占优先级范围为0~32([7:3]是5位,2的5次方是32),子优先级为0-8([2:0]是3位,2的3次方是8)。HAL库下的中断服务函数。
2023-11-11 12:43:18
30
1
原创 HONG时钟系统
⑥系统时钟SYSCLK最高为72MHz,其中左边的倒梯形为选择器SW,有三个来源:①的内部高速时钟、⑤的锁相环时钟PLLCLK和②外部高速时钟。时钟最高是36MHz,APB2的输出时钟最高是72MHz。内部高速时钟HSI可直接经过选择器SW给系统时钟SYSCLK,此时系统时钟SYSCLK为8MHz;⑩RTCCLK(实时时钟)的时钟源也有三个,分别是②外部高速时钟HSE的128倍分频(黄色)、③外。⑤锁相环时钟PLLCLK由内部高速时钟HSI和外部高速时钟HSE,经过分频和PLL锁相环倍频而来。
2023-11-09 18:14:01
54
1
原创 HONGLED
一共接收三个参数,第一个是端口,第二个是引脚,第三个参数是表示这个IO控制输出的状态其中包含两个成员(GPIO_PIN_RESET表示低电平和GPIO_PIN_SET高电平)这个函数实际上是对某组端口进行初始化,因为刚好三个灯端口都属于GPIOB,所以直接完成了三个LED的引脚初始化,这里的两个参数分别是:所属端口和GPIO结构体。为了使用清晰方便和后续使用,把GPIO所属端口也进行宏定义.其中引脚为了方便使用我们也宏定义,原本的三个引脚函数是。初始化GPIO的函数定义是。对GPIO的输出控制函数是。
2023-11-09 12:57:09
40
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人