自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【ESP32】ESP-IDF开发 | I2C从机接收i2c_slave_receive函数的BUG导致程序崩溃解决(idf-v5.3.1版本)

在调试I2C外设的demo时,按照官方文档的描述调用相关API,烧录程序后发现程序会不断崩溃,系统log如下。初步分析log,原因是访问到了不存在的地址。一开始我以为是自己的代码问题,反反复复改了几次都会出现同样的问题。后面使用backtrace追踪出现问题的代码位置,代码在执行到i2c_slave.c的77行的时候崩溃了。这是I2C中断服务函数内调用的,仔细观察发现,这个函数的处理就有问题。

2024-11-03 14:49:51 91

原创 【ESP32】从零开始学ESP32单片机栏目目录

对于了解过WiFi、蓝牙开发的同学应该听说过或这两款芯片,它们是由上海乐鑫半导体推出的WiFi芯片。在之前如果个人开发者要开发WiFi功能,只能购买像德州仪器、瑞昱这些国外公司的芯片,价格昂贵不说,开发、学习门槛相对较高。ESP32和ESP8266的出现可以说完美解决了这一困局,而且乐鑫的芯片大多以模组的方式进行售卖,更加大大降低了开发者的开发成本,提高了开发效率,像ESP8266的模组,在网上几块钱就能拿下,更高性能的ESP32模组也是十块钱就能拿下。开发方面,乐鑫官方推出了。

2024-09-08 15:58:46 1580

原创 【GD32】从0开始学GD32单片机栏目目录 | 兆易创新32位微处理器

兆易创新32位微处理器教程,分为初级、中级、高级,3个部分。

2022-09-05 15:24:13 5099 3

原创 【ESP32】ESP-IDF开发 | I2C控制器+I2C主从收发例程

I2C(),是由Philips公司在1980年代初开发的一种半双工的同步串行总线,它利用一根时钟线和一根数据线在连接总线的两个器件之间进行信息的传递,为设备之间数据交换提供了一种简单高效的方法。每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。I2C在硬件上是采用了开漏输出,在这种模式下GPIO没有输出负载的能力,因此总线上的每根管脚都需要接上拉电阻才能正常通信。I2C每次通信都由主机发起,

2024-11-03 15:38:06 885

原创 【ESP32】ESP-IDF开发 | PWM脉宽调制器+PWM波形输出和捕获例程

脉宽调制器 (PWM) 广泛用于电机和电源的控制。在ESP32的PWM模块如下图所示。PWM外设中包含。定时器和操作器之间是可以相互绑定的,不仅能一对一,也可以一对多,多对多地绑定,这使得ESP32可以适应各种各样的应用需求。

2024-11-02 17:13:41 642

原创 【ESP32】Arduino开发 | LED PWM控制器+呼吸灯例程

有关ESP32的LED PWM控制器的介绍放在了ESP-IDF的对应开发文章中,跳转可以找到。

2024-10-19 16:17:01 365

原创 【ESP32】ESP-IDF开发 | LED PWM控制器+呼吸灯例程

把函数放到内部RAM中,提高执行速度。回调函数里面就是设置渐变参数,并启动下一轮的渐变。通过cnt变量判断是从灭到亮还是从亮到灭渐变;因为cnt是全局变量,所以这里用了一个互斥量。这个函数返回是否有更高优先级的任务需要唤醒。最后就是配置渐变参数并启动渐变功能了。烧录程序到开发板,就能看到呼吸灯了。

2024-10-13 17:08:42 796

原创 【ESP32】ESP-IDF开发 | Timer硬件定时器+定时器闹钟例程

ESP32内置。每个定时器包含一个16-bit预分频器和一个64-bit可自动重新加载向上/向下计数器。ESP32的定时器分为2组,每组2个。定时器具有闹钟功能,闹钟事件会引发重新加载和触发中断。硬件定时器的时钟是由APB时钟提供的,;定时器时钟经过预分频器的分频后,才是定时器计数的频率。2. API。

2024-10-07 16:44:27 1072

原创 【ESP32】Arduino开发 | Timer定时器+定时器闹钟例程

有关定时器外设的详细介绍在ESP-IDF的对应文章中,跳转可以找到。

2024-10-07 15:08:31 692

原创 【ESP32】Arduino开发 | I2C控制器+I2C主从收发例程

有关I2C控制器的详细介绍放在了IDF开发的文章中,跳转可以找到对应的文章。

2024-09-28 16:40:43 1143

原创 【ESP32】Arduino开发 | UART异步收发传输器+串口收发例程

ESP32的UART设备详细介绍会放在ESP-IDF开发文章中,可以跳转找到。

2024-09-21 15:38:09 608

原创 【ESP32】ESP-IDF开发 | UART通用异步收发传输器+串口收发例程

UART可以说是开发者使用得最多的外设之一了,打印log几乎都是使用串口来实现的。UART是一种异步全双工的通信方式,异步传输的特性使得它仅需2根线就可以完成全双工的传输,但这也要求发送端和接收端的速率、停止位、奇偶校验位等都要相同,通信才能成功。一个典型的UART帧开始于一个起始位,紧接着是有效数据,然后是奇偶校验位(可有可无),最后是停止位。ESP32上的UART控制器支持多种字符长度和停止位。另外,控制器还支持软硬件流控和 DMA,可以实现无缝高速的数据传输。2. 硬件架构ESP32中的。

2024-09-21 14:59:23 1312

原创 【ESP32】Arduino开发 | 中断矩阵+按键输入中断例程

对于中断矩阵的详细介绍会放在ESP-IDF开发文章中,跳转可以找到对应文章。

2024-09-16 17:22:05 598

原创 【ESP32】ESP-IDF开发 | 中断矩阵+按键输入中断例程

ESP32的中断是十分灵活的,依靠中断矩阵,ESP32可以将任一外部中断源单独分配到每个 CPU的任一外部中断上。ESP32总共有71个外部中断源每个CPU可以链接26个外部中断源,因此总共可以生成52个外部中断(双核)。但是外部中断源中有4个是不能任意分配的,只能分配给指定的CPU,像上图的PRO_CPU或APP_CPU。ESP32的每个CPU有32个中断,其中编号6、7、11、15、16、29为内部中断,其余都属于外部中断。具体的外部中断源和内部中断可以查看官方的参考手册。

2024-09-16 16:46:50 718

原创 【ESP32】Arduino开发 | GPIO通用输入输出+LED点灯和按键输入例程

关于ESP32上的GPIO外设详细介绍会放在本栏目的ESP-IDF开发文章中,跳转可以找到对应的文章。

2024-09-15 17:02:00 732

原创 【ESP32】ESP-IDF开发 | GPIO通用输入输出+LED点灯和按键输入例程

ESP32芯片有34个物理GPIO pad,每个GPIO pad都可用作一个通用IO或连接一个内部的外设信号。IO_MUX、RTC IO_MUX和GPIO交换矩阵用于将信号从外设传输至GPIO pad。从上面看到,每个pad可以配置成GPIO功能(连接GPIO交换矩阵)或者直连功能(旁路GPIO交换矩阵),功能的切换通过IO_MUX来实现。ESP32一共有,要使用某个外设,就要把外设信号连接到对应的GPIO pad上,这个功能就是由GPIO交换矩阵来实现的。

2024-09-15 16:28:17 1209

原创 【GD32】外部存储器控制器(EXMC)驱动16位8080时序并口屏(GD32F470ZGT6)

GD32F4系列中的EXMC外设可以用来驱动外部的储存器,如SDRAM、SRAM等等,在之前的中有介绍其用法。但EXMC还有一种比较特别的玩法就是用来驱动8080并口屏;之前讲过,EXMC的工作原理就是把外部的储存器地址映射到芯片内部的一段地址中。而显示屏的驱动其实也是把数据写到显示芯片的RAM中,这个RAM本质还是储存器的一种,因此我们也可以用EXMC外设把显示芯片的RAM映射到单片机中,这样可以大大提高通讯速度。

2024-09-07 17:37:09 1027

原创 【GD32】RT-Thread实时操作系统移植(GD32F470ZGT6)

最近几年可以发现国产的实时操作系统越来越受欢迎了,本篇要移植的就是当中的翘楚——RT-Thread。RT-Thread诞生于2006年,是国内以开源中立、社区化发展起来的一款高可靠实时操作系统 ,由睿赛德科技负责开发维护和运营。并且在上一年度的市场欢迎程度中位列第一,第一次超过了老牌的FreeRTOS系统。相比于FreeRTOS,它的优势是强大的第三方和官方软件库,这意味着在项目开发中可以大大减少软件库移植的时间,提高了开发效率。不过根据我以往的项目经验,

2024-09-01 14:51:52 1601 1

原创 【GD32】从零开始学GD32单片机 | USB通用串行总线接口+HID键盘例程(GD32F470ZGT6)

USB,全称通用串行总线,相信大家都非常熟悉了,日常生活只要用到手机电脑都离不开这个接口,像鼠标键盘U盘都需要使用这个接口进行数据传输,下面简单介绍一下。

2024-08-31 16:00:25 1216 7

原创 【GD32】FreeRTOS实时操作系统移植(GD32F470ZGT6)

第四个参数是用户数据指针,如果要传数据给任务就可以设置;第五个参数是任务的优先级,数字越大优先级越高,这个跟单片机的优先级逻辑是相反的;第六个参数是任务句柄,如果不需要获取任务的句柄那么可以传空指针。调vTaskStartScheduler启动任务调度。一般来说,在led_task任务函数里面,先初始化LED灯,然后在死循环里面每隔一秒改变一次灯的状态,使用vTaskDelay函数进行延时,里面的数要。

2024-08-25 15:14:39 1235

原创 【GD32】从零开始学GD32单片机 | PMU电源管理单元+深度睡眠和待机例程(GD32F470ZGT6)

PMU电源管理单元通俗讲就是用来管理MCU的电源域的,它主要有两个功能——电压监测和低功耗管理。在GD32中一共有3个电源域——VDD/VDDA域、1.2V域和备份域。VDD/VDDA域主要供PMU控制器、ADC、DAC等外设使用;1.2V域就是大部分外设都会使用的电源域,像芯片核心、AHB外设、APB外设;备份域主要供RTC外设使用。2. 低功耗模式低功耗模式是PMU的重要功能,也是我们平时用得最多的。在GD32F4中,一共有3种低功耗模式——睡眠模式、深度睡眠模式和待机模式。

2024-08-17 15:05:41 612

原创 【GD32】基于NOR Flash的LittleFs文件系统移植(GD32F470ZGT6)

LittleFs是一个轻量级的文件系统,专门为微处理器而设计的。它的主要优点是具有断电数据保护功能和均衡写入功能。断电保护比较容易理解,但均衡写入算是比较创新的一个功能。在MCU的应用中,我们常使用NOR Flash来拓展储存,NOR Flash的价格虽然便宜,但是寿命会比较低,在;通常的应用中,我们其实只会用到Flash靠前的空间,很少说会用满整块Flash。

2024-08-10 17:29:00 1140

原创 【GD32】史上最优裸机版NOR Flash驱动 | 快速读+写操作页对齐+擦除扇区对齐+保留数据擦除(GD32F470ZGT6)

在单片机应用中,我们经常使用外部Flash来存储用户数据,NOR Flash是当中最常用的,一片几块钱的NOR Flash就能够提供好几MB的空间。NOR Flash一般采用SPI接口来通讯;当然,市面上大部分的NOR Flash都支持QPI甚至OPI接口,能大大提高数据传输速率。在平时的开发过程中为了追求开发速度,都会直接去网上copy一份别人写的驱动,但对于我这个完美主义者来说,网上99%的驱动都没有达到我的要求,很多人的驱动都是追求简单的能用即可,但我总是会希望能!!!

2024-07-28 15:57:35 1184

原创 【GD32】从零开始学GD32单片机 | 基于SD卡的FatFs文件系统移植(GD32F470ZGT6)

FatFs是一个专门为微处理器设计的通用文件系统,像8051、AVR、PIC、ARM架构的微处理器都能兼容该文件系统。FatFs文件系统最大的一个优点是它是的,这意味着你只需要再移植一个USB驱动就可以实现在电脑中访问单片机的储存结构,做一个小U盘或者实现文件拖拽升级这样的骚操作。当然除了上面的优点,它还同时等功能,同时开发者可以根据需要对FatFs进行裁切,使其满足嵌入式系统的要求。

2024-07-21 15:18:00 1436

原创 【GD32】从零开始学GD32单片机 | WDGT看门狗定时器+独立看门狗和窗口看门狗例程(GD32F470ZGT6)

看门狗从本质上来说也是一个定时器,它是用来监测硬件或软件的故障的;它的工作原理大概就是开启后内部定时器会按照设置的频率更新,在程序运行过程中我们需不断地重装载看门狗,以使它不溢出;如果硬件或软件发生故障没有及时重装载看门狗,就会引发中断或复位。在GD32中看门狗分为独立看门狗(FWDGT)和窗口看门狗(WWDGT)。

2024-07-13 14:33:47 2019

原创 【GD32】从零开始学GD32单片机 | RTC实时时钟+日历例程(GD32F470ZGT6)

RTC在低功耗应用中可以说相当重要,因为在使用外部低速晶振的条件下,它在所有的低功耗模式下都可以工作,这使得RTC很适合实现芯片的低功耗唤醒。因为RTC使用的是VBAT供电域,默认配置下该供电域的寄存器是写禁止的,因此需要调用pmu_backup_write_enable函数使能写操作。main函数调用rtc_config函数初始化RTC,传入struct tm结构体,这个结构体是time.h里面定义的,是系统库自带的,它的定义如下。在低功耗应用中,RTC的自动唤醒功能可以说是必用到的,RTC内部使用。

2024-06-23 15:05:03 1761 1

原创 【GD32】从零开始学GD32单片机 | SDIO外设+SD卡读写例程(GD32F470ZGT6)

SDIO(Secure Digital Input and Output)全称安全的数字输入输出接口;是从SD内存卡接口的基础上演化出来的一种外设接口。SDIO接口兼容以前的SD内存卡,并且可以连接支持SDIO接口的设备。它可以连接SD 卡、SD I/O卡、多媒体卡(MMC)和 CE-ATA卡主机接口;除了连接常见的存储介质外,它还可以用于连接WiFi、GPS、摄像头等设备。MMC:与多媒体卡系统规格书 V4.2 及之前的版本全兼容。有三种不同的数据总线模式:1 位(默认)、4 位和 8 位;

2024-06-01 17:57:25 2003 1

原创 【项目】基于区块链和大数据的中药材全产业链溯源物联网系统

该项目的硬件部分使用多种传感器监测中药材的生长,如:温湿度传感器、土壤温湿度传感器、光照传感器等等;采集的数据会定时上传至云服务器。系统采用双主控设计,传感器数据采集使用芯片,传感器数据发送服务器和触控屏的控制使用ESP32S3模块。两个芯片之间使用串口进行通讯。

2023-06-20 15:43:01 724

原创 【GD32】从零开始学GD32单片机 | 外部存储器控制器EXMC+SDRAM读写例程(GD32F470ZGT6)

外部存储器控制器EXMC,用来访问各种片外存储器,通过配置寄存器,EXMC可以把AMBA协议转换为专用的片外存储器通信协议,包括SRAM,ROM,NOR Flash,NAND Flash,PC Card和SDRAM。

2023-03-13 19:19:13 9342 7

原创 【ESP32】Platformio+Arduino+LVGL | 如何加载图片(使用C语言数组方法)

总的来说,通过这种方法加载图片的好处就是简单、快捷,比较适合整个项目只有一两张图片这种需求。但缺点也很明显,因为图片是直接被保存在内存中的,所以能加载多少图片取决于你的单片机内存有多大,像我的这一张图片,150X150的分辨率,16位色彩,就需要占掉150x150x(16/8)=45000B≈45KB的内存。所以如果项目中需要加载很多的图片,那么搭建一个文件系统,把图片存在Flash中,需要的时候再加载是更好的方法。

2023-01-09 22:33:12 2446

原创 【ESP32】Arduino+LVGL 如何使用PSRAM优化显示

可能有同学在设置了上面的参数后仍然发现屏幕好像还是卡卡的,这是因为以上都是在软件层面进行的优化,软件的优化是有限的,不如直接在硬件上进行优化。就比如,我使用的屏幕虽然只有240X240的分辨率,但它使用的是SPI协议进行通信,相比起使用8080并口的显示屏,刷新速度肯定是大打折扣的;前者每次传输1bit,但后者每次可以传输8bit或16bit,这个差距是巨大的。又比如,PSRAM虽然有4MB的空间,看上去很大,但它走的也是SPI协议;

2023-01-06 18:28:02 6606 5

原创 【ESP32】VSCode+Arduino+Platformio 如何使用ESP32上的PSRAM

最近在做一个基于ESP32的项目,ESP32虽然官方声称自带多达520KB的RAM,比起同价位的STM32可以说是十分良心。然而在做项目的时候发现,这520KB的RAM实际能用的其实没有想象中那么多,特别是ESP32在开启WiFi后会占掉这里面的一大部分。而且我的项目中有用到显示屏,那么这几百KB的RAM就更不够用了。经过我自己的测试,240X240的屏幕在LVGL并不能开启双缓冲全屏刷新。简单计算一下,不算其他的内存开销,实现240X240屏幕的双缓冲全屏刷新只需要240x240x(16/8)x2=230

2023-01-05 23:40:32 7410 12

原创 【GD32】从0开始学GD32单片机(13)—— ADC模数转换器外设详解+PS2遥杆例程

介绍了GD32中ADC外设的功能和使用,包含PS2手柄摇杆的驱动例程

2022-10-28 11:12:44 5955 1

原创 【GD32】从0开始学GD32单片机(12)—— TIMER高级定时器详解+DMA修改PWM波占空比例程

介绍了GD32的高级定时器功能及内部结构,包含DMA修改PWM波占空比例程

2022-10-24 09:25:43 7575 6

原创 【GD32】从0开始学GD32单片机(11)—— TIMER通用定时器详解+PWM波形输出捕获例程

介绍了GD32的通用定时器的系统结构,包含PWM波形输出和捕获例程

2022-10-21 16:17:24 7748 7

原创 【GD32】从0开始学GD32单片机(10)—— TIMER基本定时器详解+1毫秒延时例程

介绍了GD32基本定时器的总体架构和使用,定时器1毫秒延时例程

2022-10-17 09:00:40 10336 7

原创 【GD32】从0开始学GD32单片机(9)—— SPI外设详解+主机从机发送和接收例程

介绍了GD32的SPI外设,包含主机从机发送和接收例程

2022-10-08 10:24:39 13175 8

原创 【毕业设计】智能WiFi远程灯带控制系统

该项目是一个可以通过WiFi进行远程操控的灯光系统。用户可通过遥控器上的触摸显示屏对远处的LED灯带进行操作,如调色、开关、切换显示样式等等。

2022-09-30 12:49:15 2885 4

原创 【项目】用户可自定义简易宏键盘

在日常的电脑使用中,为了节省操作的时间,我们常常会使用电脑内置的快捷键来替代繁琐的鼠标操作,如使用ctrl+c来复制、ctrl+v来粘贴、ctrl+z来撤回。但即使是像上面效率非常高的快捷键,也要用户同时按下两个按键才能实现,更不用说有一些键在键盘之间的距离比较远,于是便萌生了开发一个用户可自定义的宏键盘,用户通过桌面端的软件设置键盘上每个键对应的快捷键,在需要使用的时候只需要按下对应的按键即可触发快捷键,实现一键操作,极大提高工作效率。

2022-09-30 12:48:28 1957

原创 【项目】久护康——坐垫上的个人健康管家

这个项目就是一个坐垫,它能收集用户的生理信息,如用户的坐姿、心跳等等,若发现某一项生理指标不正常则会通过振动提醒用户,用户的生理数据也会实时上传至云服务器。后面项目组又提出了多个基于坐垫的衍生产品,目前正在开发的是智能摆件和鼠标。因为我在该项目组中只负责坐垫的开发,所以以下内容大部分都是关于坐垫的。

2022-09-30 12:47:50 432

【项目】环境监测 | 可燃气体传感器+温湿度传感器+雨滴传感器+OLED屏幕

备赛广东省电赛的时候,队长给我布置了这个小项目,说有可能会用在比赛的作品中,但实际就不知道了,所以在这里分享一下代码。 总的来说,这个项目还是蛮适合对STM32已经入门然后想进阶的小伙伴。 项目包含了对各种常见模块的代码撰写,每种模块对应的通信协议、用到的外设也不尽相同;项目还涉及了对FreeRTOS系统的基本移植和使用,对于想进阶STM32的小伙伴是非常好的。

2022-09-02

空空如也

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

TA关注的人

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