自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2、在LVGL模拟器中了解部件的基础属性

同时设置宽度、高度:lv_obj_set_size(obj,new_width,new_height);同时设置X、Y轴坐标:lv_obj_set_pos(obj, new_x, new_y);设置高度:lv_obj_set_height(obj,new_height);设置宽度:lv_obj_set_width(obj,new_width);设置X轴坐标:lv_obj_set_x(obj, new_x);设置Y轴坐标:lv_obj_set_y(obj, new_y);2、不同的部件共用一个事件回调函数。

2024-09-26 16:45:05 353

原创 1、LVGL模拟器的搭建及简单使用(codeblock)

接下来分别是创建一个和switch_obj处以并列关系的以整个屏幕lv_scr_act()为父对象的子对象switch_obj2和以switch_obj为父对象的子对象switch_obj3。2、用codeblock打开模拟器代码中的LittlevGL.cbp,在void my_gui(void)编写自己的代码,例如。安装包获取:https://www.codeblocks.org/downloads/首先实例化了switch_obj这个对象,然后通过代码。该代码在codeblock中的运行效果为。

2024-09-24 10:38:00 205

原创 2、FreeRTOS之队列管理

通常接收方收到数 据后,需要知道数据的来源,并根据数据的来源决定下一步如何处理。由于本例中两个写队列任务具有相同的任务优先级,所以一旦其中一个任 务调用了 taskYIELD()taskYIELD()的任务转移到 就绪态,同时另一个任务进入运行态。这是因为一旦读队列任务从队列中读走一个数据单元,某个写队列任务。就会立即抢占读队列任务,把刚刚读走的位置重新写入,之后便又转入阻塞态以等待队。也是从从队列中接收数据单元,不同的是并不从队列中删出接收到。毫秒超时,因为有两个任务在不停地往队列中写数据。

2024-03-16 16:28:59 1029

原创 1、FreeRTOS之任务管理

通过调用 vTaskPrioritySet() API 函数来改变两个任务的相对优先级。离开阻塞态后,再一次成为就绪态中具有最高优先级的任务,因此会抢占。进入阻塞状态后,空闲任务得到执行的机会。空闲任务会释放内核为已。来删除自己,但是为了纯粹的演示,传递的是任务自己的句柄。什么也没有做,只是删除自己。成为最高优先级的任务,所以继续执行,调用。具有最高优先级,所以会立即得到执行。用一个任务函数代替任务1任务2。定义一个空闲任务钩子函数。在任务1种创建任务2。被自己删除之后,任务。

2024-03-16 14:32:28 491

原创 13、输入捕获实验

STM32输入捕获工作过程(通道1为例)一句话总结工作过程:通过检测TIMx_CHx上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TIMx_CCRX)里面,完成一次捕获。步骤1:设置输入捕获滤波器(通道1为例)步骤2:设置输入捕获极性(通道1为例)步骤3:设置输入捕获映射通道(通道1为例)步骤4:设置输入捕获分频器(通道1为例)步骤5:捕获到有效信号可以开启中断。

2024-03-02 08:20:38 621

原创 12、窗口看门狗

之所以称为窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚。窗口看门狗工作示意图:窗口看门狗工作过程总结:当喂狗的时候如果计数器的值大于某一设定数值W[6:0]时,此设定数值在WWDG_CFG寄存器定义。当计数器的数值从0x40减到0x3F时[T6位跳变到0]。

2024-03-02 08:19:11 875

原创 11、SystemInit函数解读

5、初始化之后可以通过变量SystemCoreClock获取系统变量。如果SYSCLK=168MHz,那么变量SystemCoreClock=168000000。2、首先如果使用外部时钟源HSE,要配置外部晶振频率:stm32f4xx.h。APB1总线时钟(PCLK1=SYSCLK/4)=42MHz。APB2总线时钟(PCLK2=SYSCLK/2)=84MHz。AHB总线时钟(HCLK=SYSCLK)=168MHz。1、系统时钟初始化函数:SystemInit();SYSCLK(系统时钟)=168MHz。

2024-02-04 15:57:23 762

原创 10、STM32时钟系统

第二个输出PLLQ用于生成USB OTG FS的时钟(48MHz),随机数发生器的时钟和SDIO时钟。第一个输出PLLP用于生成高速的系统时钟(最高168MHz)专用PLL(PLLI2S)用于生成精确时钟,从而在I2S接口实现高品质音频性能。主PLL(PLL)由HSE或者HSI提供时钟信号,并具有两个不同的输出时钟。3、STM32F4时钟信号输出MCO1(PA8)和MCO2(PC9)。1、STM32有5个时钟源:HSI、HSE、LSI、LSE、PLL。4、任何一个外设在使用之前,必须首先使能其相应的时钟。

2024-02-04 01:37:28 419

原创 9、C语言复习

define是C语言中的预处理命令,它用于宏定义,可以提高源代码的可读性,为编程提供方便。#define 标识符 字符串。

2024-02-04 00:31:46 508

原创 8、内部FLASH模拟EEPROM实验(STM32F407)

在程序中编程(IAP,In Application Programming):通过任何一种通信接口(如IO端口,USB,CAN,UART,I2C,SPI等)下载程序或者应用数据到存储器中。也就是说,STM32允许用户在应用程序中重新烧写闪存存储器中的内容

2023-12-01 23:44:26 1397

原创 7、单片机与W25Q128(FLASH)的通讯(SPI)实验(STM32F407)

SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。

2023-12-01 23:31:11 1354 2

原创 6、单片机与AT24C02的通讯(IIC)实验(STM32F407)

2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。

2023-11-30 23:25:17 1432

原创 5、DMA Demo(STM32F407)

DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高

2023-11-30 22:33:33 781

原创 4、RTC 实时时钟Demo(STM32F407)

RTC模块和时钟配置是在后备区域,即在系统复位或者待机模式唤醒后RTC的设置和时间维持不变,只要后备区域供电正常,RTC将一直工作下去。(RTC实质:一个掉电(主电源)后还继续运行(由VBAT供电)的32位的向上计数器,STM32F103没有分组的时间寄存器,需要自己解析,而F4有分组的时间寄存器。两个32位寄存器包含二进码十进制格式(BCD)的秒,分钟,小时(12或24小时制),星期几,日期,月份和年份。并且还可以进行夏令时补偿。其他32位寄存器还包含可编程的闹钟亚秒,秒,分钟,小时,星期几和日期。

2023-11-29 23:34:06 3137 3

原创 3、TFTLCD Demo(STM32F407)

例如:假设设置的是从左到右,从上到下的扫描方式,那么设置好起始坐标(通过SC,SP设置)后,每写入一个颜色值,GRAM地址将会自动自增1(SC++),如果碰到EC,则回到SC,同时SP++,一直到坐标:EC,EP结束,其间无需再次设置的坐标,从而大大提高写入速度。ILI9341在收到该指令后,第一次输出的是dummy数据(无效),第二次开始,读取到的才是有效的GRAM数据(从坐标:SC,SP开始),输出规律为:每个颜色分量占8个位,一次输出2个颜色分量。而对STM32F4,则设置为15。

2023-11-29 10:48:49 1912

原创 2、PWM Demo (STM32F407)

【代码】2、PWM Demo (STM32F407)

2023-11-27 23:26:32 442

原创 1、STM32F407 LED Demo

ifndef、#define、#endif格式条件编译,作用是避免头文件内容比重复定义。

2023-11-26 23:58:28 559

原创 2-3独立按键的单击与连击

如果是对参数的大小进行调整,经过修改连击的触发速度,实现快速调整。经过类似的做法,可实现越转越快的效果)

2023-11-25 15:27:27 379

原创 2-2 独立按键短按与长按

【代码】2-2 独立按键短按与长按。

2023-11-25 14:42:25 338

转载 2-1 非阻塞延时实现独立按键的消抖与按键识别

将按键的状态分成这三种:初始态(未按下)、确认态(按下)、释放态(松手)有利于并行多任务的运行。

2023-11-24 00:02:52 284

原创 1-2 非阻塞延时实现LED闪烁功能(累计定时中断次数)--多路软件定时器的功能实现

硬件定时器不够的时候可以用这种软件定时器的方法,如果不需要哪个软件计时器,设成0即可。这里用的定时计数器,所以定时时间比较准确。

2023-11-21 23:28:53 194

原创 1-1、阻塞延时与非阻塞延时之非阻塞延时实现LED闪烁(累计主循环次数)

软件延时器:由于不利于多任务并行,因此需要改造该延时函数,使其具有多任务并行能力,它在启动时,不能因为自己对时间的需求而导致系统及系统中其它任务都眼巴巴的等着它。但是这种方式会随着任务的增多时间变得不均匀,要想时间更加均匀要借助定时器。延时函数:独占性的延时函数,其在运行时,整个系统都将处于停止等待的状态。不好完成多个LED不同频率的闪烁。

2023-11-21 22:33:23 265

原创 一、USB协议基础

USB协议的一些基础知识

2023-07-02 17:42:44 1228

原创 ESP32 中断

结论:错误出现在printf()和Serial.printf()上,如果在中断中使用printf(),就会出现我的错误,要在中断中打印,需要使用Serial.printf()。

2023-07-01 16:46:25 561

原创 STM32C6T6点灯

STM32C6T6点灯,实现灯闪烁

2023-01-14 01:56:40 397

原创 sizeof和strlen、线性表

目录1、sizeof和strlen2、线性表1、sizeof和strlenchar sArr[] = "ILOVEC";/*用strlen()求长度*/printf("sArr的长度=%d\n", strlen(sArr));很显然,上面示例代码的运行结果为 6(因为不包括结束字符 \0)。char sArr[] = "ILOVEC";/*用sizeof求长度*/printf("sArr的长度=%d\n", sizeof(sArr));相对于函数 strlen

2022-04-09 21:36:54 1691

原创 逻辑结构与存储结构

目录顺序存储:链式存储:算法:时间复杂度:空间复杂度:逻辑结构-数据元素之间的逻辑关系-抽象的(集合结构、线性结构、树形结构、图形结构)存储结构-数据结构在计算机中的表示-具体的(顺序存储、链式存储、索引存储、散列存储)顺序存储:数组就是顺序存储优点:1、可以实现随机存取2、每个元素占用最少的空间缺点:只能使用整块的存储单元,会产出较多的碎片链式存储:结构体的一部分储存数据,另一部分储存下一个数据的地址优点:充分利用所有存储单元,不会出

2022-04-08 14:40:45 160

原创 结构体、结构体指针、C++的引用

目录1、结构体与结构体指针1.1 结构体的定义、引用、初始化1.2 结构体指针1.3 typedef的使用2、C++的引用讲解1、结构体与结构体指针有时候需要将不同类型的数据组合为一个整体,以便于使用。例如,一名学生有学号、姓名、性别、年龄、地址等属性,如果针对学生的学号、性别、年龄等都单独定义一个变量,那么在有多名学生时,变量就难以分清。为此,C语言提供结构体来管理不同类型的数据组合。1.1 结构体的定义、引用、初始化#define _CRT_SECURE_N

2022-04-07 16:43:29 835

原创 9-3、str系列字符串操作函数

str系列字符串操作函数主要包括strlen、strcpy、strcmp、strcat等。strlen函数用于统计字符串的长度(不包括结束符\0),strcpy函数用于将某个字符串复制到字符数组中,strcmp函数用于比较两个字符串的大小,strcat函数用于将两个字符串连接到一起。需要使用头文件string.h1、strlen#include <stdio.h>#include <string.h>int main(){ char c[20] = "hell

2022-04-07 09:46:41 419

原创 函数的声明、递归调用

目录1、函数的声明、定义与调用1.1 函数的声明与定义1.2 函数的分类与调用2、递归调用3、变量及函数的作用域3.1 局部变量1、函数的声明、定义与调用1.1 函数的声明与定义strcpy没有头文件也可以运行的原因:这个函数的实现是在C库中,头文件中只是声明1.2 函数的分类与调用实参向形参的数据传递是单向“值传递”,只能由实参传给形参,而不能由形参传回给实参。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参

2022-04-07 09:39:16 407

原创 指针的本质与使用场景

目录1、指针的本质1.1 指针的定义1.2 取地址操作符与取值操作符2、指针的使用场景2.1 指针的传递2.2 指针的偏移2.3 指针与自增、自减运算符2.4 指针与一维数组2.5 指针与动态内存申请2.6 字符指针与字符数组的初始化3、二级指针3.1 二级指针的传递1、指针的本质1.1 指针的定义一般在内存地址中存储的是数据,如果我们需要将某个变量的地址保存下来,就需要用到指针。1.2 取地址操作符与取值操作符取地址操作符为&am

2022-04-06 21:26:09 1316

原创 9-2、gets和puts

1、gets函数类似于scanf函数,用于读取标准输入,但是scanf函数在读取字符串时遇到空格就会认为读取结束,所以当输入的字符串中存在空格时,就需要使用gets函数进行读取。gets只能读取字符,scanf除了可以读取字符,还能读取整型、字符型等。c是字符数组or字符指针?char c[20]c是一个字符数组,但是编译器给c内部存了一个值,c里边存储的值的类型是字符指针2、puts函数类似于printf函数,用于输出标准输出#include <stdio.h>

2022-04-05 15:26:36 1001

原创 9-1字符数组的传递

%c输出的是单个字符,%s输出的是字符串#include <stdio.h>void print(char d[]){ int i = 0; while (d[i] != '\0') { printf("%c", d[i]); i++; } printf("\n");//让字符数组打印完之后换行 d[0] = d[0] - 32;//将字符数组的首字母改成大写}int main(){ char c[6] = "hello";//数组长度要大于等于6 p

2022-04-05 13:11:32 322

原创 安卓:1、实现用户名密码登陆、修改、后台保留功能

1、layout<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:lay

2022-03-30 19:04:59 1165

原创 定时计数器模块

练习使用定时/计数器#include <STC15F2K60S2.h>#include <intrins.h>unsigned char i=0;unsigned long j=0;//1、初始化系统void system_init(){ P2=0XA0; P0=0X00; P2=0X80; P0=0XFF; P2=0X00;}//2、led显示函数void led_display(unsigned char i){ P2=0X80

2022-02-23 09:09:59 196

原创 外部中断模块

通过外部中断0和外部中断1使led状态取反#include <STC15F2K60S2.h>#include <intrins.h>//外部中断0和1,使用P3^2和P3^3,需将J5的2和3短接//程序要求:// 按下 P32-INT0 引脚对应的按键 S5,L1 状态翻转// 按下 P33-INT1 引脚对应的按键 S4,L2 状态翻转unsigned char i;//用来//1、系统初始化void system_init(){ P2=0XA0;

2022-02-21 20:18:16 487

原创 led模块

基于国信长天单片机竞赛实训平台的 LED 亮度控制程序设计如下:#include <STC15F2K60S2.h>#include <intrins.h>//1、系统初始化(J3要调到io模式,否则无法将控制端连接起来)void system_init(){ P2=0XA0;//打开蜂鸣器、继电器控制端 P0=0X00;//关闭蜂鸣器、继电器 P2=0X80;//打开led控制端 P0=0XFF;//关闭led P2=0X00;//取消对任何外设的.

2022-02-21 15:38:36 4505

原创 蓝桥杯之独立按键、矩阵按键

1、独立按键:S7开灯,S6关灯#include <STC15F2K60S2.h>#include <intrins.h>sbit S7=P3^0;sbit S6=P3^1;sbit S5=P3^2;sbit S4=P3^3;//***************初始化系统*********************void init_system(){ P2=0XA0; P0=0X00; P2=0X80; P0=0XFF; P2=0X00;}//*

2022-02-18 18:57:02 167

原创 蓝桥杯之DS18B20

#include <STC15F2K60S2.h>#include <intrins.h>//***************定义DS18B24引脚*************sbit DQ=P1^4;//****************段码***********************unsigned char code duanma[18]={0xc0,//00xcf,//10xa4,//20xb0,//30x99,//40x92,//50x82,//60.

2022-02-16 19:12:16 8743

原创 蓝桥杯之数码管

1、静态显示:让后四个数码管显示数字0#include <STC15F2K60S2.h>#include <intrins.h>//*************系统初始化******************void init_system(){ P2=0XA0; P0=0X00;//关闭蜂鸣器、继电器 P2=0X80; P0=0XFF;//关闭led P2=0X00;}//************让后四个数码管显示0***************void

2022-02-13 16:56:04 368

1、LVGL模拟器的搭建(codeblock)

用codeblock打开LittlevGL.cbp,在void my_gui(void)编写自己的代码

2024-09-24

2、PWM Demo (STM32F407)

PWM效果视频

2023-11-27

空空如也

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

TA关注的人

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