
STM32
文章平均质量分 56
Car12
嵌入式开发,爱好者
展开
-
RTS 如何使用流控方式自动实现收发
通过 UART 控制器的硬件流控功能,可以实现 RTS 引脚的自动化控制,从而简化 RS-485 的半双工通信实现。如果硬件支持流控,推荐使用这种方式,因为它减少了手动干预的需求,提高了系统的可靠性和效率。如果不支持硬件流控,则需要通过软件手动控制 RTS 引脚的状态切换。原创 2025-04-24 20:23:30 · 629 阅读 · 0 评论 -
stm32 8080时序驱动lcd屏幕
经过测试探索者开发板使用模式A和模式B都可以驱动lcd驱动,主要是时序参数必须和lcd驱动芯片一致。fsmc相关的gpio配置位推挽复用模式。他这里使用的是FSMC的NOR 模式B。 2. 使用SRAM存储器模式。他们使用EXMC驱动外部lcd。 3. 16位数据宽。gpio,fsmc时钟使能。 2.数据建立时间。 2.数据建立时间。 3.使用模式A。 3.使用模式A。 4. 写使能。背光gpio输出配置。 1.地址建立时间。fsmc控制相关配置。原创 2024-09-01 09:00:47 · 494 阅读 · 0 评论 -
韦东山老师的从0写RTOS笔记
生产bin文件生产汇编文件。原创 2023-11-12 10:04:39 · 731 阅读 · 0 评论 -
【RTT驱动框架分析03】- sfus flash 操作库的分析和基于STM32F103RCT6+CUBEMX的SFUS移植教程
sfus 是根据flash_table 数组内部提供信息初始化spi总线和初始化sfud_flash_chip (spi flash抽象结构)信息。由下面的信息可知,不同的spi flash擦除命令不一致,读写命令是一致的。修改flash设备列表和flash id。目前支持的spi flash的目标。main.c 文件添加如下内容。修改文件sfus_port.c。这里也是以后可以添加的。到此移植的基本条件满足。原创 2023-07-30 19:16:59 · 385 阅读 · 0 评论 -
stm32通用外部spi下载算法实现
参考硬汉嵌入式:【实战技能】任何支持SWD接口的单片机都可以方便移植的SPI Flash烧写算法制作_哔哩哔哩_bilibili。6.修改FlashDev.c文件的的FlashDevice内部的参数,主要是flash的大小,和算法名称。2.2创建一个工程,复制一个字库文件,将字库文件内容存储在外部flash中。注意:系统时钟函数必须返回0,表示时钟配置成功,否则初始化就是失败。1.使用cubemx建立一个LED工程,主要是配置系统时钟。添加一个字库文件放置在工程内部,设置字库文件的放置位置。原创 2023-05-14 21:28:24 · 2783 阅读 · 2 评论 -
AT24CXX 的读写方法
在嵌入式设计中,E2PROM存储芯片常被应用于需要掉电存储,且容量不大的场合。,因此,更适合于数据量存储不大,且更需要频率擦写的应用场景。原创 2023-03-24 15:29:53 · 658 阅读 · 0 评论 -
can入门
主要介绍can总线的基本知识原创 2022-10-16 21:44:03 · 868 阅读 · 0 评论 -
【RT_Thread学习笔记】---以太网LAN8720A Lwip ping 通网络
RT-Thread 以太网ETH lan8720A,lwip ping原创 2022-08-02 22:29:09 · 1985 阅读 · 1 评论 -
SEGGER 的硬件异常 分析
SEGGER 的硬件异常 分析原创 2022-07-28 18:18:42 · 786 阅读 · 0 评论 -
stm32 操作W25Q256 W25Q16 spi flash
stm32 操作W25Q256 W25Q16 spi flash原创 2022-07-27 20:34:22 · 7865 阅读 · 3 评论 -
ULN2003驱动28BYJ-48单极性步进电机
驱动器和电机stm32 驱动代码 while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ if(x%4==0) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_4,GPIO_PIN_SET); } else if(x%4==1) { HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET); } else if原创 2022-05-11 16:50:34 · 555 阅读 · 0 评论 -
stm32 手指按下持续复位
问题:单片出现大概1s复位移植,手指按在1脚位置出现连续复位间隔200ms的感觉,我在网上找了各种办法都没有解决,其中说的最多的是单片机复位引脚虚焊问题,或者说是看门狗问题我参考了这篇文章参考文章注意起始stm32的复位电路可以不焊接我目前焊接了cap1 和cap2的电容最后解决问题的方法是擦除整个flash问题解决相关文章:单片机地主频工作正常,高主频就不正常STM32F427 主频超过140M 死机 ...原创 2022-04-26 10:45:05 · 1548 阅读 · 0 评论 -
CAN学习笔记
CAN 基本知识遵循 ISO11898 标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻遵循 ISO11519-2 标准的低速、远距离“开环网络”,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2 千欧”的电阻。当表示逻辑 1 时(隐性电平),逻辑 0 时(显性电平),显性电平具有优先的CAN 还会使用“位同步‖的方式来抗干扰、吸收误差,原创 2022-04-18 11:53:27 · 650 阅读 · 0 评论 -
按键处理框架
框架源码头文件/* * Copyright (c) 2016 Zibin Zheng <znbin@qq.com> * All rights reserved */#ifndef _MULTI_BUTTON_H_#define _MULTI_BUTTON_H_#include "stdint.h"#include "string.h"//According to your need to modify the constants.#define TICKS_INTER原创 2022-03-31 11:02:01 · 421 阅读 · 0 评论 -
STM32定时器学习
定时器时钟计数器是从CK_PSC分频器分频后得到CK_CNT,计数器 COUNTER 根据 CK_CNT 频率向上计数;ARPE 位置 1,影子寄存器有效,就是影子寄存器的使能端,只有在事件更新时才把 TIMx_ARR 值赋给影子寄存器基本定时器的数据结构RepetitionCounter:重复计数器,属于高级控制寄存器专用寄存器位,利用它可以非常容易控制输出 PWM 的个数。定时器的中断配置高级定时器高级控制定时器比通用定时器增加了可编程死区互补输出、重复计数原创 2022-03-26 11:15:02 · 1186 阅读 · 1 评论 -
could not stop cortex-m device 问题
cortex-m 单片机下载问题原创 2022-03-24 15:54:30 · 18690 阅读 · 10 评论 -
lwip netbuf_ref: invalid buf“
netbuf_ref 申请空间失败报错 lwip netbuf_ref: invalid buf"解决办法就是lwipopt.h文件中定义宏原来opt.h文件的定义是#define MEMP_NUM_NETBUF 2修改后#define MEMP_NUM_NETBUF 6原创 2022-03-16 14:13:45 · 471 阅读 · 0 评论 -
STM32使用串口DMA方式发送数据
1.cubemx设置1.1基本设置1.2 打开DMA和中断2.代码实现HAL_UART_Transmit_DMA(&huart1,(uint8_t*)str,strlen(str));HAL_Delay(500);Free的串口打印函数QueueHandle_t lock;/* 含有临界资源保护的printf 添加一个互斥锁保护临界资源*/ void init_lock(void){ lock = xSemaphoreCreateRecursiveMutex(原创 2022-02-25 20:44:56 · 4899 阅读 · 0 评论 -
12.FreerRTOS学习笔记-链表的使用
数据结构的内部数据结构双向节点的定义struct xLIst_ITEM{ TickType xItemValue; //辅助值,用于节点做顺序排列 struct xList_ITEM *pxNect; // 指向下一个节点 struct xList_ITEM *pxFrevious; //指向上一个节点 void *pvOwner; // 指向拥有该节点的内核对象 void *pvContainer; // 指向该节点所在的对象原创 2022-01-17 11:21:27 · 742 阅读 · 0 评论 -
4.FreeRTOS学习笔记-消息队列
消息队列传输的数据不定长支持先进先出FIFO,同时支持后进先出LIFO均支持超时机制。每个消息队列都与消息空间在同一段连续的内存空间中消息队列的大小是消息队列控制块大小+(单个消息空间大小 * 消息队列长度)任务或者中断服务程序都可以给消息队列发送消息超时发送,超时发送失败返回 errQUEUE_FULL发送紧急消息,就是放在队列头部支持 消息读超时包含头文件#include <queue.h>消息队列运作模型读消息的3中情况有就取出,没有 扭头就走没原创 2022-01-16 11:17:35 · 1132 阅读 · 0 评论 -
C语言的链表实现
代码/*链表节点*/typedef struct _cjlist_node{ //指向上一个节点 struct _cjlist_node *pre; //指向下一个节点 struct _cjlist_node * next; //数据指针 unsigned char *data;}list_node_t;/*链表根节点*/typedef struct _cjlist_root{ //指向链表头 list_node_t *head; //指向链表尾 list_nod原创 2021-12-14 18:04:30 · 818 阅读 · 0 评论 -
ssd1306 oled 行扫描方式
2021-12-10ssd1306 之前使用的是页地址模式,今天改为 水平地址模式页地址模式:只是列地址会自动增加,页地址不会自动增加,页地址需要手动增加;行地址模式:列地址和页地址都会自动增加,横向扫描方式列地址模式:列地址和页地址都会自动增加,是列扫描方式,oled.c#include "oled.h"#include "stdlib.h"#include "oledfont.h"//#include "delay.h"u8 OLED_GRAM[144][8];void原创 2021-12-10 14:20:01 · 2373 阅读 · 0 评论 -
3.FreeRTOS学习笔记-任务
任务状态1. 任务相关函数1.1 任务挂起函数被挂起的任务绝不会得到 CPU 的使用权,不管该任务具有什么优先级void vTaskSuspend( TaskHandle_t xTaskToSuspend )1.2 挂起所有任务=挂起调度器实质就是挂起调度器 void vTaskSuspendAll( void )1.3 任务恢复函数让任务进入就绪态 void vTaskResume( TaskHandle_t xTaskToResume )中断函数专用–中断版xTask原创 2021-11-29 17:58:40 · 735 阅读 · 0 评论 -
2.STM32F407ZGT6 学习笔记-移植 FreeRTOS
1. 在工程下建议FreeRTOS文件夹2. 在FreeRTOS文件夹下建立 src 和 port 文件夹 (src用于存放freertos源码,port文件夹存放内存和接口相关的文件)3. 复制freertos/source文件夹下所有c文件复制到刚刚建立的freertos/src目录下4. 复制FreeRTOSv9.0.0\FreeRTOS\Source\portablex下的MemMang和RVDS文件夹复制到刚刚建立的port问价夹下5. 将FreeRTOSv9.0.0\FreeRTOS原创 2021-11-27 20:41:04 · 1053 阅读 · 0 评论 -
stm32f103RCT 使用ssd1306 IIC 接口 移植lkdGUI
ldkGUI关于lkdGUI的信息参考:https://blog.youkuaiyun.com/qq_23274715/article/details/80959804已经移植好的程序源码和测试代码:https://gitee.com/chejia12/lkd-gui移植ldkGUI参考官方给的参考文档手把手教你移植创建stm32f103rct6 mdk工程添加OLED驱动添加OLED sd1306库函数,添加OLED分组添加驱动源文件,添加驱动头文件,字体文件参考:https://blo原创 2021-11-26 19:00:05 · 1517 阅读 · 0 评论 -
卡尔曼滤波算法-简易版
代码实现:/** ****************************************************************************** * @file bsp_kalman.h * @author Zxp * @version V1.0.0 * @date 2021-06-08 * @brief 卡尔曼滤波算法头文件 *******************************************************...原创 2021-11-25 19:29:43 · 949 阅读 · 0 评论 -
STM32CAN外设使用
测试单片机是STM32F427ZGT6,CAN外设的主频是45MHzCan外设配置TTCM(Time triggered communication mode)时间触发模式,用于生成时间戳,可以实现分时同步功能ABOM(Automatic bus-off management) 自动离线管理,当节点检测到它发送错误或接收错误超过一定值时,会自动进入离线状态AWUM(Automatic bus-off management),自动唤醒功能,CAN 外设可以使用软件进入低功耗的睡眠模式,如果使能了原创 2021-11-23 17:32:49 · 2591 阅读 · 0 评论 -
使用stm32 freertos 调试没有问题,正常运行卡死
原因就是printf 的调用导致的,cubumx默认生成的代码是没有fputc函数的原创 2021-11-19 14:39:12 · 1856 阅读 · 0 评论 -
STM32F427 主频超过140M 死机
死机原因就是cap1cap2没有焊接参考:http://www.openedv.com/forum.php?mod=viewthread&tid=279246&page=1原创 2021-11-18 18:12:35 · 352 阅读 · 0 评论 -
10.FreeRTOS学习笔记-中断管理
FreeRTOS 的中断管理支持:开/关中断。恢复中断。中断使能。中断屏蔽。可选择系统管理的中断优先级中断管理的运作机制当中断产生时,处理机将按如下的顺序执行:保存当前处理机状态信息载入异常或中断处理函数到 PC寄存器把控制权转交给处理函数并开始执行当处理函数执行完成时,恢复处理器状态信息从异常或中断中返回到前一个程序执行点关闭中断时间在操作系统中,很多时候我们会主动进入临界段,系统不允许当前状态被中断打断,故而在临界区发生的中断会被挂起,直到退出临界段时候打开中断原创 2021-11-18 15:23:39 · 585 阅读 · 0 评论 -
11.FreeRTOS学习笔记-内存管理
heap_1.c 管理方案是 FreeRTOS 提供所有内存管理方案中最简单的一个,它只能申请内存而不能进行内存释放,并且申请内存的时间是一个常量heap_2.c方案支持释放申请的内存,但是它不能把相邻的两个小的内存块合成一个大的内存块heap_3.c 方案只是简单的封装了标准 C 库中的 malloc()和 free()函数,并且能满足常用的编译器。...原创 2021-11-18 15:11:11 · 438 阅读 · 0 评论 -
9.FreeRTOS学习笔记-任务通知
基本概念每个任务都有一个 32 位的通知值任务通知可以替代二值信号量、计数信号量、事件组,也可以替代长度为 1 的队列(可以保存一个 32位整数或指针值)通知比通过信号量等 ICP 通信方式解除阻塞的任务要快 45%,,并且更加省 RAM 内存空间打卡宏定义 configUSE_TASK_NOTIFICATIONS 设置为 1任务通知是属于任务中附带的资源,所以在任务被创建的时候,任务通知也被初始化的任务通知可以在任务中向指定任务发送通知,也可以在中断中向指定任务发送通知只有在任务中可以等待原创 2021-11-18 14:40:08 · 1022 阅读 · 0 评论 -
8.FreeRTOS学习笔记-软件定时器
基本概念软件定时器的回调函数类似硬件的中断服务函数,所以,回调函数也要快进快出,而且回调函数中不能有任何阻塞任务运行的情况,例如不可以使用vTaskDelay()FreeRTOS 提供的软件定时器支持单次模式和周期模式FreeRTOS 通过一个 prvTimerTask 任务(也叫守护任务 Daemon)管理软定时器只有设置 FreeRTOSConfig.h 中的宏定义 **configUSE_TIMERS **设置为 1 ,将相关代码编译进来以系统节拍周期为计时单位定时器消息队列的长度由宏原创 2021-11-18 12:07:37 · 1095 阅读 · 0 评论 -
7.FreeRTOS学习笔记-事件
FreeRTOS 提供的事件特点事件只与任务相关联,事件相互独立,一个 32 位的事件集合(EventBits_t 类型的变量,实际可用与表示事件的只有 24位),用于标识该任务发生的事件类型,其中每一位表示一种事件类型(0 表示该事件类型未发生、1 表示该事件类型已经发生),一共 24 种事件类型。事件仅用于同步,不提供数据传输功能事件无排队性,即多次向任务设置同一事件(如果任务还未来得及读走),等效于只设置一次允许多个任务对同一事件进行读写操作支持事件等待超时机制逻辑与逻辑或是否原创 2021-11-18 11:00:34 · 812 阅读 · 0 评论 -
5.FreeRTOS学习笔记- 互斥量
基本概念互斥量又称互斥信号量(本质是信号量),是一种特殊的二值信号量互斥量 支持互斥量所有权、递归访问以及防止优先级翻转的特性,用于实现对临界资源(如显示器、打印机)的独占式访问。任意时刻互斥量的状态只有两种,开锁或闭锁。持有该互斥量的任务也能够重复获得这个锁而不被挂起,这就是递归访问,也就是递归互斥量的特性,信号量重复获取则会被挂起互斥量与二值信号量最大的不同是:互斥量具有优先级继承机制,而信号量没有优先级继承机制优先级继承算法是指,暂时提高某个占有某种资源的低优先级任务的优先级,使之原创 2021-11-18 09:49:23 · 882 阅读 · 0 评论 -
6.FreeRTOS学习笔记-信号量
基本概念抽象的来讲,信号量是一个非负整数,所有获取它的任务都会将该整数减一(获取它当然是为了使用资源),当该整数值为零时,所有试图获取它的任务都将处于阻塞状态二值信号量二值信号量既可以用于临界资源访问也可以用于同步功能互斥量有优先级继承机制,二值信号量则没有这个机制二值信号量更偏向应用于同步功能(任务与任务间的同步或任务和中断间同步)而互斥量更偏向应用于临界资源的访问将二值信号量看作只有一个消息的队列因此这个队列只能为空或满计数信号量计数信号量肯定是用于计数原创 2021-11-17 20:18:34 · 1018 阅读 · 0 评论 -
1.FreeRTOS学习笔记-入门概述
FreeRTOS编程约定port 表示接口的意思int 型从不使用,只使用 short 和 long 型。在 Cortex-M 内核的 MCU 中,short 为 16 位,long 为 32位数据类型重定义在 portmacro.h 这个头文件中实现* 在 keil 中,默认 char 是无符号的变量前缀char 型变量的前缀是 c,short 型变量的前缀是 s,long 型变量的前缀是 l,portBASE_TYPE 类型变量的前缀是 x。还有其他的数据类型,比如数据结构,任原创 2021-11-17 19:19:06 · 615 阅读 · 0 评论 -
RTT Nano+STM32F407ZGT6+LAN8720A+LWIP+CubeMX+MDK
1. 创建stm32工程2. 配置时钟时钟树程序下载、时间基调试串口3.配置ETH外设和重映射io和复位引脚4. 配置PHY外设5. 配置lwip6. 配置rt-thread没有rtt 包请参考https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil添加rtt nano配置rtt nano开启所有的ip原创 2021-11-09 17:52:17 · 808 阅读 · 2 评论 -
探索者STM32F407ZGT6+LWIP+LAN8720A_FREERTOS CubxMx配置教程
1. cubumx创建STM32F407ZGT6工程2. 配置时钟配置外部时钟## 配置程序下载口和hal库时基3. 配置ETH外设和复位脚配置stm32 外设配置网卡芯片数据4. 配置lwip5. 打开freeRtos打开就行不需要配置其他6. 添加网卡复位代码 HAL_GPIO_WritePin(GPIOD,GPIO_PIN_3,GPIO_PIN_RESET); HAL_Delay(50); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_原创 2021-11-09 16:42:56 · 1011 阅读 · 0 评论 -
IO电平检测框架
框架功能可以检测首次输入可以检测持续输入可以检测输入失效框架核心代码头文件#ifndef __INOUT_IO_H_#define __INOUT_IO_H_#include <stdint.h>//#include "stm32f4xx_hal.h"//消抖时间#define DEBOUNCE_TIM 5//输入对象的个数#define NAME_MAX_LEN 10//输入对象的个数#define CONTINUE_EVENT_RATE 10//调试宏原创 2021-09-13 10:36:29 · 443 阅读 · 0 评论