【HEXO】[01]HEXO常用命令
hexo远程发布
1hexo clean && hexo g && hexo d
新建md文件
1hexo n "name"
【蓝桥杯单片机】程序模板设计
前言
为了确保程序的准确性,总结了以下要点
保证程序逻辑正确,其次再是“基于现象上”的正确,保证程序不会出现隐性问题
在逻辑正确的前提下,保证数据读取的实时性,尽量优化代码执行效率
对数据的处理,在确保程序完全正常运行的前提下,最大限度地提高内存空间的利用率
编写程序时,先写主框架,验证逻辑后,再依次验证其他模块
数码管/LED模块工作原理
例如:数码管的段选/位选输出由两个74HC573锁存器控制
锁存器送出数据的过程
P0输出8位数据
锁存器不使能,Q0~Q7为之前的数据,D0 ~ D7等待被送出
锁存器使能,数据送出,Q0~Q7即为P00 ~ P07的信号
注意:OE此处默认接GND
**如何控制锁存器送出数据的顺序/使锁存器单个送出数据? **
由一个或非门(U25)的四个输出控制四个锁存器的输入使能信号(Y7C~Y4C)
或非门的输入Y7 ~ Y4由一个译码器的输出控制,或非门的一端WR默认为低电平,那么这里的或非门就相当于一个输入为Y(n)的非门
其中74HC138(U24)的输入为P2口的P27~P25
通过推导可知,P27 ~ P ...
【C语言入门学习】[1]初识C语言 01
【C语言入门学习】[1]初识C语言 01
2024.1.9更新
2024.2.20更新
#前言
什么是C语言?
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
ANSI C,作为C语言最初的标准
C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。
其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C
C语言介于机器语言和高级语言之间
一、基本概念
一、c语言的基本框架
main函数是程序的入口
return 0;函数正常运行结束时返回0
二、c语言的数据类型
char //字符数据类型
short //短整型
int //整形
long //长整型
long long // ...
【stm32单片机】[操作系统][RT-Thread][3]线程通信
邮箱
邮箱的字节数固定为4个字节。
紧急消息
动态和静态分配
操作系统中动态分配和静态分配的区别
1. 动态分配
动态分配在堆里面,优点是能够灵活分配内存,能够在程序运行中进行内存申请
2. 静态分配
分配在栈里面,编译时就会分配好内存
示例
12/* 创建一个容量为4的邮箱 */mb = rt_mb_create("mb", 4, RT_IPC_FLAG_PRIO);
容量是什么?
容量是邮件的个数,容量是4,表示同时能发送四份邮件。
创建容量为4的邮箱,在堆中会申请4x4Byte的空间。
邮箱代码例程
rt_mb_recv(mb, (rt_uint32_t*)&msg, RT_WAITING_FOREVER); // 接收邮件
这里RT_WAITING_FOREVER表示阻塞式等待
改成RT_WAITING_NO则表示非阻塞式等待
12345678910111213141516171819202122232425262728293031323334353637#include <rtthread.h>/* 创建邮箱 */rt_mailbox_ ...
【stm32单片机】[操作系统][RT-Thread][2]线程同步
RT-Thread Shell
RT-Thread定时器
软定时器:在系统线程timer中执行,通过shell可以查看到系统默认开启了一个timer进程
硬定时器:回调函数在中断上下文中执行
1. 定时器的创建过程
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950/* * Copyright (c) 2006-2024, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2024-10-17 RT-Thread first version */#include <rtthread.h>static rt_thread_t timer1; //定义定时器static rt_thread_t timer2;//定义超时回调函数s ...
【stm32单片机】[操作系统][RT-Thread][1]内核与线程
裸机开发与操作系统的区别
裸机开发
单一任务(阻塞式)
手动分配资源
缺乏抽象层
灵活性、实时性较高
操作系统
多任务调度
自动资源管理
硬件抽象层
RT-Thread的线程
线程的概念
在RT-thread中,线程是最小的工作单元。每个线程负责一个任务。RT-Thread根据线程的优先级决定哪个任务先完成.。
RT-Thread 支持多达 256 个优先级。0是最高的优先级。
线程的组成部分
线程控制块:线程的名字,线程要执行的任务,线程的优先级,线程的状态
线程栈:保存临时数据
入口函数:线程的任务内容
线程的状态
线程有五种工作状态:
初始状态:线程创建还未使用
就绪状态:线程准备好,但是没有拿到资源
运行状态:线程正在执行任务,占用CPU
挂起状态:线程暂时停止工作
关闭状态:线程的任务完成了,线程结束,不再使用
线程的优先级
RT-Thread支持256个优先级
时间片
时间片是线程允许工作的时间。如果多个线程的优先级相同,则根据”时间片“,执行完任务A后再执行任务B,轮询进行。
RT-Thread工程
RT-Thread项目创建
RT ...
【嵌入式】[Keil5使用技巧][1]Debug使用
2024.10.16:本博客将长期维护优化
一、参考文章
Keil5软件使用-进阶调试篇_keil调试教程-CSDN博客
keil5软件仿真波形以及出现unknown signal的解决方法_unknown signal.-CSDN博客
【stm32单片机】-Hal库-嵌入式-6-PWM、输入捕获
# 按键状态机与回调函数的封装思想
一、PWM配置
生成频率为1000HZ的PWM信号,占空比可调
1. CubeMX配置
选择Internal(内部时钟)
根据CubeMX的芯片引脚图,选中引脚后的相关外设提示,可以便捷的配置定时器的作用通道
定时器PWM相关配置项
这里50有误,应该改为500——>对应50%的占空比
二、输入捕获
1. CubeMX配置
Slave Mode: Reset Mode
从模式 (Slave Mode):在定时器中,“Slave Mode” 是指定时器可以被外部信号触发或由另一个定时器控制。定时器可以通过外部输入或其他定时器的输出信号来复位、启动或停止。
Reset Mode:在从模式的复位模式下,每当触发事件发生时,定时器的计数器(CNT寄存器)会被重置。这对于需要周期性重置定时器的应用很有用。
Trigger Source: TI1FP1
触发源 (Trigger Source):TI1FP1 通常表示 “Timer Input 1 Filtered Pin 1”,即定时器通道1的输入引脚(TI1)的滤 ...
【stm32单片机】[Hal库][嵌入式][5]IIC,RTC
IIC模块
一、MCP4017
MCP4017 是一款由 Microchip Technology 公司生产的数字电位器。它是一种电子元件,通常用于调整电压、增益或信号强度,类似于传统的机械电位器,但可以通过数字控制来调节。
以下是 MCP4017 的一些主要特点:
数字电位器:MCP4017 是一个单通道的 7 位数字电位器,分辨率为 128 个不同的电阻值(2^7 = 128 步)。
I²C 接口:它使用 I²C 通信协议进行控制,通过两个引脚(SCL 和 SDA)与主设备通信。I²C 是一种广泛使用的双线通信协议,适合用于低速设备。
低功耗:MCP4017 设计为低功耗设备,适合需要节能的应用场景。
电阻范围:MCP4017 提供了不同的电阻范围,常见的型号包括 5kΩ、10kΩ、50kΩ 和 100kΩ 等。用户可以通过 I²C 指令在这些范围内调节电阻值。
非易失性存储器:该器件不带非易失性存储器(EEPROM),因此每次上电后,电位器的默认设置是中间值(即 64/128 的位置)。
应用场景:MCP4017 常用于音频调节、信号处理、传感器校准等需要精确调节电阻的场合 ...
【嵌入式系统】[RDK X3][1]RDK X3派基础入门
一、常用接口和视觉处理方法
摄像头的开启
1234567891011121314151617181920212223242526#摄像头类创建class pi_Camera(): def __init__(self): # 图像初始化配置 self.Video = cv2.VideoCapture(8, cv2.CAP_V4L2) # 使能摄像头8的驱动 # 检查摄像头是否打开 ret = self.Video.isOpened() if ret: print("The video is opened.") else: print("No video.") codec = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G') self.Video.set(cv2.CAP_PROP_FOURCC, codec) self.Video.set(cv2.CAP_PROP_FP ...