自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 Rtthread OS 功能开发之 socket tcp协议程序开发

在使用ART -PI 硬件开启WiFi联网之后,就可以进行TCP和UDP协议编程了。确保以上项都已经选择后。随后再查看以下选择项是否正常启动。一般来说这些是默认打开的。在Settings 中查看网络选项中是否选中了以下的三层。电脑端使用Python做TCP服务器程序并开启服务。测试如下:ART_PI 作为TCP客户端。

2026-10-21 18:46:46 133

原创 Rtthread OS 功能开发之 socket udp协议程序开发

代表服务器的IP地址,局域网测试,需要客户端和服务器连接同一个WiFi,并且客户端需要指定服务器的IP地址才可以正常通信。在使用ART-PI 硬件开启WiFi联网之后,就可以进行TCP和UDP协议编程了。本实例使用的是UDP客户端,创建了两个线程,一个发送数据另一个接收数据。随后再查看以下选择项是否正常启动。一般来说这些是默认打开的。在Settings 中查看网络选项中是否选中了以下的三层。确保以上项都已经选择后。一个非常简单的数据回环测试。

2026-10-15 18:56:57 197

原创 Rtthread OS 功能开发之 AP6212 模块WiFi联网

在上面的操作中需要手动连接WiFi,输入密码和名称,这点在实际操作中很麻烦,可以使用以下的操作实现WiFi自动联网。以ART-PI为例介绍WiFi的使用方法,新建项目工程,打开AP6212硬件设备。编译运行,再次使用join 指令之后就能正常保存了,复位之后可以自动联网。等待程序运行到了识别网卡成功后代表WiFi模块正式完成初始化。也可以ping 百度试一下,能正常获取返回就代表正常上网了。wifi join WiFi名称 WiFi密码。并取消C基础库,CTRL+S保存。二、设置自动联网功能。

2026-10-12 19:19:01 192

原创 Rtthread OS 功能开发之 AP6212 模块蓝牙透传功能

本文介绍了在ART-PI开发板上实现蓝牙透传通信的完整流程。基于AP6212芯片,通过修改NimBLE库中的bleuart.c文件,添加最大输入长度定义及写回调函数,并调整console相关接口,解决编译报错问题。最终成功实现手机与开发板间的双向蓝牙串口通信:手机通过Notify订阅接收数据,通过Write发送指令,开发板通过串口回传响应。整个过程无需复杂配置,适用于物联网远程控制等场景。

2026-10-08 18:46:36 38

原创 Rtthread OS 功能开发之 AP6212 模块蓝牙功能

返回的数据如果不是全部0XFF或者00 ,就是代表正常存在蓝牙固件,这是接下来进行的必备条件。第三步:针对UART3 需要在项目中添加对应的GPIO口说明,需要在board.h文件中添加以下内容。第四步:项目中已经选择了蓝牙心跳数据包传输实验,因此程序下载完成后在shell 中,输入。这代表本项目的C库存在问题,直接在内核选择中取消使用C基础库这个选项即可解决问题。使能串口3,保存,生成程序到工程中。本次采用的这个蓝牙示例是心跳数据上传,因此数据通信是单方向的。编译后,无错误后进行下载。

2026-09-29 15:13:26 154

原创 嵌入式工程师进阶指南:RTOS下多协议适配功能框架

这种方法可以选择自己项目需要的协议,同时让所有可能使用的协议共存一个项目文件中,依靠宏的打开和关闭选择协议文件是否编译,未参与编译的文件不会占用内存和存储空间。serial_protocol_init用于硬件的初始化,串口的接收数据需要配合中断,而中断的接收到达有需要配合信号量实现,因此信号量需要设置在串口的空闲中断内部。针对modbus协议,所有的内容和长度的校验是一致的,但是针对内容的解析和返回的数据是需要按照功能码进行分析的。接下来就是具体协议的具体程序,直接去对接本适配器框架既可。

2026-09-09 10:17:49 25

原创 嵌入式工程师进阶指南:RTOS线程入口参数使用(二)

例如一个BMS锂电池保护板使用了前端采集芯片、MOS管、WIFI或蓝牙模块、液晶屏幕、MCU、RS485芯片、CAN芯片等这些硬件设备,因为不同的项目配置采用的芯片、MCU、通信方法均不同,所以需要设计一个设备查看器的功能在板子运行中可以通过串口或者其他的方法读取到这些硬件信息,其作用类似于电脑上的设备管理器功能。本例中因为硬件设备的替换很常见所有使用了适配器模式,在硬件设备的替换不频繁的时候不采用适配器模式的情况下,不需要将程序设计的如此繁琐。// p 指向 value,p 的值是 0x1000。

2026-09-01 13:33:50 197

原创 嵌入式工程师进阶指南:RTOS线程入口参数使用(一)

现有一个LCD线程,它的工作需要配置参数才能正常的初始化,而项目设计要求在LCD线程运行之前通过主线程传递这些参数,从而实现主线程对配置参数的全局统一控制,而不是由LCD线程在分散在不同的配置文件中去读取。倘若还有其余的设备需要配置参数都可以通过在Dev_cfg_params结构体中添加内容后,通过主线程调用分线程初始化的时候透过线程参数指针传递下来。在一些工程开发中,这个传递参数还是能够实现非常重要的功能,下面将简单介绍一下值向线程下传递和从线程中向上提取值的使用方法。而在LCD线程中需要做以下处理。

2026-08-20 10:57:58 184

原创 嵌入式工程师进阶指南:RTOS事件在工程中具体应用

可以改用以下的方法来解决问题:创建一个500ms的软件定时器用于计时时间,到达之后在回调函数中直接执行发送事件的操作即可,同样需要在发送数据线程中添加首先发送事件的操作,在事件接收线程中,需要去阻塞等待事件的出现,同时检测两个事件,无论哪个事件被检测到就可直接进入分支程序运行下面的函数。对于像执行LED闪烁这样的简单函数来说,使用延时等待的方法是可以接受的,但如果执行的其余函数时间过程和内容过大这种操作方法会导致消息队列接收数据出现实时性问题。

2026-08-12 18:11:06 222

原创 嵌入式工程师进阶指南:RTOS消息队列在工程中具体应用

这两个值就决定了这个消息队列的缓存区大小,任何类型的指针的长度是固定的4字节(32位平台上),MAX_SIZE是4,大概缓冲区大小为4+4*4 = 20字节。因为是计算的指针的大小,因此在传递的时候只能传递指针。两者最大的不同在于第一个是计算结构体指针的大小,而第二个是计算结构体的大小。以上的两个线程分为传感器线程和液晶屏幕显示线程,以数据的角度划分传感器线程是生产者,而LCD线程是消费者。这种多发多收的消息队列使用方法,存在最大的问题是在于操作繁琐,发送者必须管理所有接收者队列句柄;

2026-08-10 09:30:07 169

原创 嵌入式工程师进阶指南:面向对象思维的C语言

相比于C语言版本的程序,可以发现C++的明显更加简洁和紧凑,在程序中明显可以看到,灯被具象化为实例,也就是red_led 和 green_led,它们每个对自己行为负责,开启和关闭由自己的方法来实现,彼此之间互不影响。以上的程序是每个初级嵌入式软件工程师很容易就写出的程序,简单高效容易理解,可以看到C语言在实际编程中是以一种上帝视角的开发模式,要求哪个灯打开就让那个灯打开,直接去调用对应的函数即可,由开发者去充当上帝的角色掌握全局,整个流程的发起由开发者决定并且凡事亲历其为。ops的写法很多,大同小异。

2026-07-21 10:33:50 55

原创 嵌入式工程师进阶指南:适配器编程设计模式一

本文提出了一种基于适配器模式的物联网通信模块统一管理方案,通过分层架构解决不同厂商WIFI/4G/NB-IoT模块AT指令不兼容问题。系统采用三层架构:应用层(网络操作)、网络管理层(状态监控)、AT设备层(硬件适配)。核心是通过at_device_t结构体抽象硬件操作,配合命令映射表实现指令转换。文中以EC200U和ME909S模块为例,演示了如何通过统一接口注册不同模块,并详细阐述了AT指令映射机制和串口通信流程。该方案使应用层无需修改即可切换不同通信模块,显著提高了物联网设备开发效率和硬件兼容性。

2026-07-09 14:42:38 46

原创 嵌入式工程师进阶指南:注册回调机制

本文介绍了嵌入式开发中回调机制的设计与实现方法。首先阐述了编程分层思想中底层驱动调用上层应用的需求,指出回调机制是实现这一目标的核心模式。通过函数指针实现注册-存储-触发三步流程,详细演示了回调中心模块的设计,包括初始化、注册、注销和触发功能。文章结合RT-Thread系统的硬件定时器和看门狗实例,对比分析了简单实现与复杂框架的差异,重点讲解了底层中断触发上层回调的实际应用场景。

2026-06-16 14:23:15 28

原创 嵌入式工程师进阶指南:程序基础架构之前后台编程模式

【代码】嵌入式工程师进阶指南:程序基础架构之前后台编程模式。

2026-05-18 16:04:32 53

原创 嵌入式工程师进阶指南:RTOS开发原则和陷阱

嵌入式实时系统开发经验总结:1.任务优先级遵循RMA原则,周期短的任务优先级高;2.周期设置应保持谐波关系,优先选择2的幂次倍;3.避免优先级翻转,使用互斥量而非信号量;4.防止低优先级任务饥饿,避免高优先级任务忙等待;5.控制任务栈使用率在70%-80%以内,避免函数嵌套过深;6.合理使用消息队列,设置适当优先级和容量;7.采用内存池管理减少碎片,及时释放内存防泄漏。这些要点可有效提升系统稳定性和性能。

2026-05-18 16:03:01 46

原创 WiFi 模块自动联网自带MQTT协议栈和云服务器串口透传免AT开发

本文介绍了一种自动联网自带MQTT协议栈和云服务器串口透传免AT开发的WiFi 模块,本模块自动联网和自动登录云服务器,自带的云服务器免费长期支持。本模块可以实现数据上云、远程调试、远程程序升级等功能。

2026-05-10 21:51:18 77

原创 USB转IIC、SPI、CAN、RS485、TTL串口 五合一通信设备(CommAdapter)

如果在项目中对模块的IIC和SPI通信调试遇到麻烦,推荐大家使用。本模块是使用电脑USB口转接嵌入式软件开发常用的通信方式,包含TTL串口、CAN通信、RS485通信、SPI和IIC通信。SPI测试:使用本设备的MISO和MOSI和SCK、CS四个信号线连接对外模块,如果模块独立供电需要本设备和模块共地。IIC测试:使用本设备的SDA和SCL两个信号线连接对外模块,如果模块独立供电需要本设备和模块共地。TTL串口:使用本设备的TXD和RXD两个信号线连接对外模块,如果模块独立供电需要本设备和模块共地。

2026-01-08 21:01:27 320

原创 STM32 HAL库学习 RNG篇

用于配置信号源的选择和开启外设时钟,此处选择的信号源为LSE。除了可以选择这个时钟之外还有低速内部时钟48M、LSI、PLL的分频时钟可以做选择。初始化函数,内部只需要对时钟出错是否监测功能开启与否的一个选择,因为RNG功能的真随机数生成需要使用时钟作为信号源,不同于其他的软件生成一般利用当前的时间作为信号源,所以对时钟的有所要求。RNG 指的是STM32 单片机带有的硬件随机数生成器功能,通过这个硬件功能可以生成真随机数。功能明确,使用简单。此处使用了非中断生成的方法,还可以使用中断生成的方法。

2025-06-15 16:35:51 806

原创 STM32 HAL库函数学习 CRC篇

CRC是循环冗余校验,常用于数据通信过程中进行收发双方对数据组进行校验。例如RS485,DLT64协议中常用。而STM32中的CRC技术使用非常简单高效。CRC计算设计到多项式和初始值,如果不需要设置则可以直接使用ST默认的多项式和初始值。重要功能函数,用于计算CRC的值。本函数是对一组数据进行一次性的CRC计算。初始化函数1的回调函数,主要是打开本外设功能的时钟。复位功能,调用方法如上函数。

2025-05-31 23:18:12 1085

原创 STM32 HAL库函数学习 GPIO篇

​​在HAL_GPIO_EXTI_IRQHandler函数中会调用一个回调函数来完成最终的中断处理,因为不同系列调用的回调函数不一致,因此需要打开本函数内部找到具体调用哪一个回调函数。GPIO口配置锁死函数。其目的是为了防止在配置好IO口后在程序中其他地方再次修改IO的配置造成故障,使用本函数后当前的IO模式不能被修改,除非程序复位后才能修改。GPIO外设属于是任何芯片的最基础功能 ,STM32各个系列的GPIO初始化都是一致的,有不同的是部分系列在IO复用使用了单独一个成员属性。外部中断请求处理函数。

2025-05-29 20:18:32 1670 1

原创 STM32 HAL库函数学习FDCAN篇

相比于FDCAN_TxHeaderTypeDef 类型的数据 ,此处声明的变量不需要配置参数,只需要读取内部数据即可。类型的指针,此结构体类型用于封装CAN发送数据之外的其他必要信息。第三个参数是要发送的数据。CAN初始化回调配置,配置GPIO口和时钟 ,被函数1自动调用。FDCAN 接收中断的回调函数,只处理FIFO0的接收数据中断。在以前的HAL库中 两个参数合并在了一起,现在拆分成了两部分。同函数9一样,接收数据的时候也需要提供一个。参数三是数据返回的指针。复位FDCAN配置。开启FDCAN中断。

2025-04-08 10:34:30 3835

原创 STM32 HAL库函数学习SPI篇

SPI硬件初始化回调函数,自动被函数1调用,注意SPI中的CS 管脚是需要单独配置的,不能和MSIO、SCK、MOSI配合到一起。最终使用此函数初始化SPI外设,注意还要使用__HAL_SPI_ENABLE();SPI发送数据的函数(只发送数据)。通过发送中断的形式向外发送数据。SPI发送数据的函数(只发送数据)。通过阻塞的形式向外发送数据。SPI接收数据函数(只接收数据)。配置SPI通信的所有参数,主要是区分SPI的四种工作模式。SPI接收数据函数(只接收数据)。复位SPI外设的参数配置。

2025-04-08 10:34:09 2803

原创 STM32 HAL库函数学习 I2C篇

本篇内容讲述STM32的硬件IIC功能。

2022-06-18 19:26:34 21088 2

原创 STM32 库函数学习 ADC篇

本系列的库函数学习教程都是基于HAL库的,并且这个HAL库使用的是M7内核的库函数,如果使用的STM32型号低于STM32H7XX的时候发现有些HAL库函数在这些型号上没有也不用感到奇怪。STM32H7的ADC位数是16位的。1、HAL_StatusTypeDef HAL_ADC_Init (ADC_HandleTypeDef * hadc)ADC的初始化函数。ADC_HandleTypeDef ADC1_Handler;ADC1_Handler.Instance = ADC1;AD

2021-08-12 17:42:03 8383

原创 STM32 库函数学习 TIM篇

1、HAL_StatusTypeDef HAL_TIM_Base_Init (TIM_HandleTypeDef * htim)这个函数属于定时器使用基本的定时功能的初始化函数,它的输入参数为自定义的定时器指针。TIM_HandleTypeDef TIM3_Handler; //定时器句柄 void TIM3_Init(u16 arr,u16 psc){ TIM3_Handler.Instance=TIM3; //通用定时

2021-06-12 22:52:03 12843 4

原创 STM32 HAL库函数学习 UART篇

从今天开始定时更新一下有关STM32 HAL库学习的过程,主要是对HAL库函数的所有讲解。HAL_USART_Init(USART_HandleTypeDef * husart)初始化串口的的函数:用法为UART_HandleTypeDef huart1;huart1.xxx = ssss;...HAL_USART_Init(&huart1); //需要注意点的是函数的输入参数是指针类型UART_HandleTypeDef huart4; huart4.Inst.

2021-04-16 23:19:32 33261 8

原创 ART-PI平台移植Touchgfx 驱动gt9147 触摸屏幕点亮LED

本篇文章用来介绍一下怎么使用RTThread Studio 在ART-PI平台上面移植TouchGFX,并做一个简单的触摸按键让LED灯闪烁试验。我使用的液晶屏幕是正点原子的4.3寸RGBLCD,触摸芯片是GT9147。要注意的是正点原子的GT9147板液晶有新旧两个版本,目前RTT Studio里面的GT9147包读取新版的触摸位置不对。本文会简单介绍一下在移植中出现的常见的问题。再开发之前需要下载最新的RTThread Studio 2.0.0,下载最新的ART-PI BSP1.1.0随后.

2020-12-13 21:50:06 1791

原创 使用STM32CUBE对STM32F429移植TouchGFX

TouchGFX是类似于stemwin的图形界面,用这个图形库可以开发些很漂亮的应用,相信大家能搜索到这篇文章也应该对TouchGFX有一些了解了。首先在移植tfx之前需要了解最常见的移植通常是RGBLCD屏幕,使用RGBLCD就要求STM32必须有FMC功能和硬件使用外部RAM芯片,所以需要使用到LTDC、FMC、DMA2D三种技术。因此STM32F1系列和STM32F40x系列都没法移植TFX,而且TFX目前也不支持TFTLCD屏幕。本教程将使用STM32Cube移植TFX,硬件电路采取的是正点原子

2020-08-09 23:07:09 1813 4

原创 Qt多线程下Word转换为PDF

在工作的项目中需要让计算机自动生成公司生产产品的电子版的质检报告.我首先用的是让软件生成Word格式的报告,但是这个格式容易修改因此领导不太满意.现在只能修改成PDF格式.因为公司的质检报告有固定的的模板,使用Qt很方便的实现生成Word版本,所以用的方法是先生成Word格式的质检报告然后格式进行转换.一个重要的问题就是格式转换需要很长的时间,在转换期间软件会处于冻结转态.因此需要使用到多...

2020-02-21 09:21:18 2345

原创 基于STM32的ch438串口扩展芯片使用

CH438串口扩展芯片是一个一对八的串口扩展芯片,在一些串口需要过多的场合比较有用。这个串口芯片事实上并没有占用MCU的串口它实际上是使用了8个IO口做数据的传输。下面我就简单介绍一下怎么使用STM32驱动这个串口扩展芯片。并演示一个用CH438发送一段MODBUS码给电脑,电脑发给STM32的数据数据也回显示到电脑上.CH438我用的是44管脚的LQFP44封装。实际的电路是这样的:...

2019-06-22 18:52:25 21562 20

原创 STM32 测量交流电压的方法

关于STM32测量交流电的一种方法.关于交流电压测量的难点有以下几点:1.电压过大,比如市电220V,2.交流电和直流电区别很大,例如值一直在变不稳定.3.交流电压存在负值,STM32 的AD模块没法测量.4.STM32读取的电压值是瞬时值和交流电的有效值还要转换.针对以上几点:可以采取合适的硬件设计和算法设计解决.采用电流互感器将电压从高变低,采用直流电压叠加的方式将整体的交流波形抬升,...

2019-05-19 15:14:22 45253 27

原创 STM32 RTC闹钟中断和唤醒待机模式

RTC代表的是实时时钟的意思。因为它提供的时钟基准比较准确所以用处还是很多的。本文章主要讲解基于STM32F103上的RTC闹钟中断功能以及用闹钟中断唤醒STM32的待机模式。需要注意RTC的几个要点:1.RTC的值被设定后它就会一直按照设定的基准时间自己递增,如果你的硬件设备上发现一个纽扣电池,那就是给RTC功能供电用的。因此就算关闭掉设备的主电源,RTC的运行也是不受影响的,当然如果扣掉纽...

2018-08-18 22:41:23 38371 6

原创 C51单片机通过串口调节PWM波

PWM 是一种常用的电子控制技术PWM 本意为 脉冲宽度调制,可以简单理解为对占空比的控制。下图就是占空比图例,一个周期内高电平时间与周期时间的比值。现在的一些MCU自带PWM控制功能,但是51/52单片机还是没有这个功能。可以用程序自己实现。用到的51单片机资源如下:1.双定时器及定时器中断2.串口和串口中断下面看下程序:PWM.H#ifndef _PWM_...

2018-07-22 11:04:54 10489 3

空空如也

空空如也

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

TA关注的人

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