单片机
文章平均质量分 65
托马斯-木
这个作者很懒,什么都没留下…
展开
-
mqtt 简介
定义:MQTT是ISO标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议,它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。开发者:该协议由IBM公司的安迪·斯坦福-克拉克及Cirrus Link公司的阿兰·尼普于1999年共同撰写了第一个版本。特点:MQTT协议具有轻量、简单、开放和易于实现的特点,这些特点使其适用范围非常广泛,尤其是在受限的环境中,如机器与机器(M2M)通信和物联网(IoT)。原创 2024-07-18 08:54:21 · 224 阅读 · 0 评论 -
HAL_DMA_ERROR_BUSY
是一个在STM32 HAL(硬件抽象层)库中可能出现的错误标志,它表示DMA(直接内存访问)控制器当前正忙,无法接受新的数据传输请求。当尝试启动一个DMA传输操作,但DMA控制器已经处于忙碌状态时,这个错误标志可能会被设置。原创 2024-07-11 05:30:00 · 217 阅读 · 0 评论 -
stm32 使用GPIO模拟串口发送
在STM32微控制器上实现模拟串口输出(也称为软件串口或比特邦定(Bit-Banging)串口),主要是因为硬件上的UART资源有限或者为了特定需求而需要更多的串口通信接口。模拟串口意味着使用GPIO引脚模拟UART的TX(发送)和RX(接收)功能,通过软件控制GPIO引脚的电平变化来发送和接收数据。原创 2024-07-08 04:00:00 · 298 阅读 · 0 评论 -
波特率计算公式
波特率(Baud Rate)是通信领域中一个非常重要的参数,它表示每秒传输的二进制代码位数,单位是bps(位/秒)。在串行通信系统中,如UART、SPI和I2C等,波特率通常由发送和接收设备的时钟频率以及所需的数据传输速度决定。原创 2024-07-02 10:18:48 · 1792 阅读 · 0 评论 -
【单片机编程模式】状态机编程
总之,状态机编程是一种基于有限状态机的编程模式,它通过明确的状态和状态转移路径来组织程序的逻辑结构,使得程序更加清晰、易于理解和维护。在嵌入式开发等领域中,状态机编程是一种常用的编程模式。状态机编程是一种编程模式,它基于有限状态机(Finite State Machine,简称FSM)的概念。原创 2024-07-06 06:45:00 · 340 阅读 · 0 评论 -
HEX文件格式
HEX文件,全称为Intel HEX,是一种ASCII文本文件,用于记录文本行的数据。它常用于存储将被写入ROM或EPROM中的程序和数据。HEX文件由一系列符合Intel HEX文件格式的文本行构成。原创 2024-07-06 06:45:00 · 303 阅读 · 0 评论 -
STM32 启用指令缓存 HAL_ICACHE_Enable
函数在 STM32 的 HAL(硬件抽象层)库中通常用于启用指令缓存(I-Cache)。原创 2024-06-06 09:07:14 · 298 阅读 · 0 评论 -
STM32CubeMX软件的安装以及配置
STM32CubeMX软件的配置过程可以详细分为以下几个步骤,以确保您能够顺利地使用该软件进行STM32微控制器的配置和代码生成:原创 2024-06-10 04:45:00 · 843 阅读 · 0 评论 -
STM32使用HAL库时 UART ErrorCode
用于指示UART通信过程中发生的错误。这些错误码通常定义在STM32 HAL(硬件抽象层)库中,以便用户能够方便地识别和处理各种通信错误。请注意,具体的错误码和值可能会因STM32系列、型号和HAL库版本的不同而有所差异。因此,在编写代码时,建议查阅相关的STM32参考手册和HAL库文档,以获取准确的错误码和值。的值,以便对发生的错误进行适当的处理。在STM32的UART通信中,通常会在中断服务程序(ISR)或回调函数(如。在STM32的UART(通用异步收发传输器)通信中,原创 2024-06-09 08:30:00 · 250 阅读 · 0 评论 -
STM32 UART 错误代码 HAL_UART_ERROR_PE
是STM32 HAL库(硬件抽象层库)中UART(通用异步收发传输器)模块定义的一个错误码,表示“Parity Error”(奇偶校验错误)。当UART通信过程中检测到奇偶校验不匹配时,会产生这个错误。原创 2024-06-08 08:30:00 · 382 阅读 · 0 评论 -
STM32H5 DAC 配置
请注意,以上代码是基于STM32系列的一般配置方式,并且可能需要根据具体的STM32 H5型号和库函数版本进行适当的调整。建议参考STM32 H5的参考手册和相关的库函数文档以获取更详细和准确的信息。由于DAC输出是模拟信号,所以需要将相应的GPIO引脚配置为模拟输入模式(虽然这里写的是模拟输入,但实际上是用于DAC模拟输出的引脚配置)。原创 2024-06-07 08:30:00 · 368 阅读 · 0 评论 -
STM32 UART HAL_UART_ERROR_NE
是STM32 HAL库中UART(通用异步收发传输器)模块的一个错误代码,它表示“噪声错误”(Noise Error)。当UART通信过程中接收到不符合通信协议预期的信号时,可能会发生噪声错误。原创 2024-06-06 08:30:00 · 373 阅读 · 0 评论 -
单片机中大端模式--小端模式
1、大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。2、小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低。大小端原创 2017-11-22 10:15:12 · 4264 阅读 · 2 评论 -
ThreadX 互斥信号量
threadx 互斥信号量原创 2024-06-05 08:30:00 · 746 阅读 · 0 评论 -
Threadx 定时器组
软件定时器:ThreadX定时器组是基于软件实现的,不需要使用任何硬件定时器资源。它使用系统时钟作为计时基准,因此具有较高的精度和稳定性。单次模式和周期模式:ThreadX定时器支持单次模式和周期模式。单次模式意味着定时器在触发一次后将不再自动重新激活;而周期模式则允许定时器按照设定的时间间隔持续触发。ThreadX定时器组的相关函数提供了创建、激活、更改、停止和删除定时器的功能。tx_timer_create 函数功能:创建一个ThreadX定时器。函数原型参数说明。原创 2024-06-04 14:09:05 · 944 阅读 · 0 评论 -
threadX 消息队列
首先,需要在 STM32 项目中初始化 ThreadX 和创建消息队列。这通常在启动代码或初始化函数中进行。综上所述,ThreadX操作系统下使用消息队列的目的是为了提高系统的性能、灵活性、可靠性和可扩展性。在线程函数中,你可以使用。原创 2024-06-04 11:31:23 · 1316 阅读 · 0 评论 -
88e6320/88e6321 端口隔离
需要配置的寄存器为:如果端口 3,端口4之间不通,但是都与其他端口都互通。配置端口3和端口4的 0x06寄存器的6:0位即可,某一位位置1,代表此端口与这一位的端口互通,置零代表隔离。另外自身端口位需要设置为0.。则 端口3 地址0x13寄存器0x06的VLANTable配置为 ;0x67; 端口4 地址0x14寄存器0x06的VLANTable配置为 :0x67;复杂示例如下图所示:...原创 2021-06-30 14:37:46 · 1235 阅读 · 1 评论 -
88e6321/88e6320 寄存器配置
一、寄存器介绍设备寄存器映射表如下图所示: 从图中可以看到:SMI device地址从0x00 到0x1d,其中地址0x00到0x0f为PHY寄存器,0x10到0x16为POrt 寄存器,0x1B 为 Global1,0x1C为 Global2,0x1D为 Global3. 对于单芯片模式,phy寄存器的读写(port: 3 4 12 13 )的读写需要借助 GLOBAL2的pc pd寄存器进行读写。port 以及 Global 寄存器可以直接读写。 ...原创 2021-06-28 10:53:26 · 2102 阅读 · 2 评论 -
stm32配置PHY芯片
一、时序介绍使用MDC 、MDIO两只引脚进行数据配置。时序为:二、底层驱动代码1、读PHY寄存器地址:u16 PHY_WAN_Reg_Read( u8 PhyAddress, u8 RegisterAddress ){ u8 i; u8 bValue; u16 wValue; PHY_WAN_MDIO_Out();//Preamble for( i = 0; i < 32; i ++ )原创 2021-06-28 10:26:37 · 4654 阅读 · 0 评论 -
STM32程序加载---网络
待完善原创 2019-11-28 21:57:00 · 571 阅读 · 0 评论 -
stm32 程序二次加载:串口
使用串口二次加载程序即:不需要拆机就能够对产品进行升级,通过Bootloader就可以完成这项工作。该BootLoader的主要功能就是接受串口发送过来的应用程序并存放在固定的内存地址上,程序指针跳转到该地址上,程序就加载成功。1、STM32在线升级 (IAP)IAP(In-Application Programming) 指MCU可以在系统中获取新代码并对自己重新编程,即可用程序来改变...原创 2019-11-28 21:55:54 · 866 阅读 · 0 评论 -
10 种AD 采样的软件滤波方法和示例程序
假定从8 位AD 中读取数据(如果是更高位的AD 可定义数据类型为int),子程序为get_ad();1、限幅滤波法(又称程序判断滤波法)A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A)每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值B、优点:能有效克服...原创 2019-11-22 22:15:21 · 2879 阅读 · 1 评论 -
MDK逻辑分析仪使用
在keil MDK中软件逻辑分析仪很强的功能,可以分析数字信号,模拟化的信号,CPU的总线(UART、IIC等一切有输出的管脚),提供调试函数机制,用于产生自定义的信号,如Sin,三角波、澡声信号等,这些都可以定义。 以keil里自带的stm32的CPU为例,对PWM波形跟踪观测,打开C:\Keil\ARM\Boards\Keil\MCBSTM32\PWM_2目录下的stm32的Dome,...原创 2019-11-22 22:13:14 · 2431 阅读 · 0 评论 -
GPRS底层驱动
char GPRS_LINK = 0; char gprs_send_id = 0;uint16_t gprs_time = 5000; struct Config_Info GPRS_Cmd[]={ "AT+CGATT?\r\n", "+CGATT: 1",50,\ "AT+CIPMODE=0\r\n","OK",50,\ "AT+CSTT=\"CMNET\"\r\n", &quo原创 2018-02-09 14:21:40 · 354 阅读 · 0 评论 -
CRC8、CRC16校验原理以及代码实现
CRC校验算法,说白了,就是把需要校验的数据与多项式进行循环异或(XOR), 但进行XOR的方式与实际中数据传输时,是高位先传、还是低位先传有关。对于数据 高位先传的方式,XOR从数据的高位开始,我们就叫它顺序异或吧;对于数据低位先 传的方式,XOR从数据的低位开始,我们就叫它反序异或吧。两种不同的异或方式, 即使对应相同的多项式,计算出来的结果也是不一样的。 下面以顺序异或的例子说明一些计算的...原创 2018-04-28 10:30:09 · 20412 阅读 · 1 评论 -
IAR使用ST-Link下载仿真
IAR使用ST-Link下载仿真修改Debugger->Setup->Driver 选择ST-LINK 修改 ST-LINK ->Interface选择SWD,CPU clock配置单片机CPU系统时钟。三、修改options->linker->config->linker configuration file选择generic_cortex.icf并修...原创 2018-11-12 15:29:01 · 9563 阅读 · 1 评论 -
数码管驱动及键盘控制芯片 CH455 STM32F407使用
1、概述CH455 是数码管显示驱动和键盘扫描控制芯片。CH455内置时钟振荡电路,可以动态驱动4 位数码管或者32 只LED;同时还可以进行28 键的键盘扫描;CH455 通过SCL 和SDA 组成的2 线串行接口与单片机等交换数据。 2、键盘扫描 下表是在DIG3~DIG0 与SEG6~SEG0 之间7×4 矩阵的按键编址,也是数码管段位和发光管LED阵列的顺序编址。...原创 2018-11-29 13:48:13 · 8386 阅读 · 2 评论 -
STM32 复位
1、复位 共有三种类型的复位,分别为系统复位、电源复位和备份域复位。1.1、系统复位 除了时钟控制寄存器 CSR 中的复位标志和备份域中的寄存器外,系统复位会将其它全部寄 存器都复位为复位值(请参见图 4)。 只要发生以下事件之一,就会产生系统复位:1.NRST 引脚低电平(外部复位)2. 窗口看门狗计数结束(WWDG 复位)3. 独立看门狗计数结束(IW...原创 2018-11-30 11:53:40 · 4469 阅读 · 0 评论 -
CJson使用(构造和解析)
一、使用说明 cJSON,目前来说,就只有两个文件,一个cJSON.c 一个cJSON.h文件。工程里添加这两个文件就可以使用CJson构造或者解析相应的文件。二、常用函数介绍cJSON * cJSON_CreateObject();创建一个json对象,返回一个cJSON结构体类型的指针。cJSON *cJSON_CreateArray();创建一个数组...原创 2019-09-16 16:12:18 · 1109 阅读 · 0 评论 -
LM75 --温度采集(时序及代码)
一、 LM75A传感器介绍二、寄存器介绍三、时序图四、代码#define LM75A_SCL_GPIO GPIOB#define LM75A_SCL_PIN GPIO_Pin_8#define LM75A_SDA_GPIO GPIOB#define LM75A_SDA_PIN GPIO_Pin_...原创 2019-09-16 19:17:07 · 12399 阅读 · 3 评论 -
stm32f407 内部flash保存数据
#include "stm32f4xx.h"//FLASH起始地址#define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址#define FLASH_SAVE_ADDR 0x080A0000 //保存地址//FLASH 扇区的起始地址#define ADDR_FLASH_SECTOR_0 ((u3...原创 2019-09-16 19:39:00 · 4614 阅读 · 2 评论 -
ADXL345代码
#include "math.h" #include "stm32f4xx.h" /******************ADXL345寄存器命令定义**********************/#define DEVICE_ID 0X00 //获取器件ID,0XE5#define THRESH_TAP 0X1D //敲...原创 2019-09-18 09:37:35 · 3449 阅读 · 3 评论 -
stm32 中printf使用
option->C/C++ compiler--->defined symbols 下添加一行_DLIB_FILE_DESCRIPTOR原创 2017-11-22 15:14:03 · 1555 阅读 · 0 评论