- 博客(44)
- 收藏
- 关注
原创 rt_memheap_free报错
接着上一篇使用rt_memheap_alloc从STM32的CCMRAM上开辟数据存储空间,遇到了一个奇怪的错误,那就是用完之后的内存释放,一般使用malloc也就是rt_malloc,申请和释放一般如下。多次尝试后,发现是strdup的原因,strdup内部使用的malloc,导致需要分别使用free和rt_memheap_free。只要内存足够,这个是没有问题的,令我感到奇怪的就是使用rt_memheap_alloc后的释放。如果我依照上面的方式,使用rt_memheap_free(fields);
2025-04-01 10:28:45
134
原创 STM32F4系列RT-Thread开启额外的RAM(CCMRAM)
1.配置RTthread的连接文件,这里直接编辑原文件(linkscripts文件夹下),添加CCMRAM段,一般是64K。如果要使用动态内存分配rt_memheap_alloc(),还需要开启heap内存堆对象。然后使用时直接就能用了,这里rt_memory_info打印不出来变化,因为并没有统一。使用CCMRAM不能用于DMA,因为这个总线不能直接访问到,配置stm32的启动文件,RTTstudio中工程路径如下。动态使用,需要先在初始化时初始化这片内存。然后就能愉快的使用了。
2025-03-31 16:22:32
390
原创 BQ4050系列SMBus寄存器块数据读取
先写入0x44寄存器要读取的块地址,然后再读取0x44,但需要注意的是,发送和接收都包含数据的长度,发送还需要crc8校验。
2025-03-27 11:26:28
222
原创 ONE NET MQTT+HTTP多端控制
ESP8266通过MQTT上传和订阅数据我就不多赘述了,教程很多,我直接刷的MQTT固件,然后通过AT指令进行MQTT操作的。QT端和Android操作差不多,也是通过get和post。Android端发送控制指令使用的POST。ONENET简单MQTT和HTTP使用。Android端使用GET获取数据。
2025-02-04 15:45:45
664
原创 RT_Thread分区创建dfs_mkfs与rt_device_find限定不一致导致报错:The flash device type must be MTD
原因在:fal分区名的长度由FAL_DEV_NAME_MAX限定,而dfs_mkfs中rt_device_find函数比较的设备名使用RT_NAME_MAX限定,而RT_NAME_MAX默认为8,当fal分区名超过RT_NAME_MAX就可能出现dfs_mkfs出错的情况。rt_device_find的设备名与fal_mtd_nor_device_create中的分区名最大长度限定不一致,导致dfs_mkfs时传入分区名时无法使用rt_device_find找到匹配的设备。
2024-11-20 13:59:23
366
1
原创 C语言生成常见波形数据
最近无聊,研究上C语言的一些程序,感觉波形生成还是挺有用的这里主要生成了正弦,方波,三角波 ,锯齿波,指数波形等首先看看效果,这里把生成的数据用python画了出来,程序在最后。
2024-08-15 23:25:35
1083
2
原创 C语言寻找波峰值
如果不取消注释,就会找到相同值的波峰点,和Python对比可以发现,Python的是取中间的值作为波峰,我这里如果取消注释,则只取第一个作为波峰,如果需要中间的可以自行更改。判断是否是上升段(从左往右看),其中top_width是判断的取样长度,judg_rate相当于是一个阈值,因为波形并不是完全理想的。做到项目有需要压力采集的处理,为了便于在程序中计算采集的波形数据,这里简单写一个查找波峰的程序。然后是判断是否是波峰,依据就是前段上升,后段下降,并且是最大值。最后是一些变量的创建,以及测试数据。
2024-08-13 14:37:16
997
原创 CH571F蓝牙orUSB摇杆鼠标
然后是主循环,虽然好像蓝牙也有个类似于任务排序的函数,但不是很会用,所以并没有用自带的调度程序,而蓝牙程序中不能长时间被其他程序占用,不然会丢失蓝牙连接,所以我没有用延时,使用的定时器计时。程序基本上是基于官方的例程上改的,用到的例程有:蓝牙的HID_Mouse,USB的CompoundDev,还有ADC,按键中断。主要原理就是ADC采集采集摇杆电压,通过蓝牙HID或者USB的HID发送给电脑或者手机,实现鼠标功能。最后是主循环,里面就是蓝牙、USB和ADC的调用程序。
2024-08-04 22:54:53
729
原创 CH571F基于官方模版创建工程
直接使用MounRiver创建的工程只有最简单的串口和GPIO功能,其他PWM和SPI等驱动基本上都有,但蓝牙和USB只有参考官方的示例来,全部自己写属实有点麻烦了,而且还需要添加BLE的库。使用WCHISP连接芯片(我这里用的usb连接,先断电,按住boot,然后再接USB上电,会自动识别,选择程序文件(导出程序文件的方法可以看我很久以前的一片文章))还有APP下的三个文件(其中有一个是main,我直接替换的原本创建的文件中的内容,记得保存文件修改 )2.打开官方的例程(我这里用的BLE鼠标的工程)
2024-07-28 21:01:45
703
原创 RT-Thread 配置注释模版
点击需要配置的项目,然后右边点击编辑就可以把默认的模版改成自己需要的了。主要是配置新建的文件以及函数的自动注释模版。首先点开窗口的首选项。
2024-07-27 20:48:56
279
1
原创 STM32F103 RT-thread配置LCD的FMC
然后把FMC初始化代码从main.c中拷贝出来,放到其他编译文件中(我是放在stm32f1xx_hal_msp.c中)按照参考教程配置,在最后你会发现屏幕没有反应,因为没有初始化代码,而如果取消掉参考文章所注释的内容也会报错,类似这样的。我选的的标准版,没有选择基于开发板,因为感觉基于开发板很多都已经配置好了(哈哈,主要是学习配置流程)使用的正点原子F103ZET6开发板,屏幕是一块4.3寸的TFTLCD,接下来直接讲配置流程。点开cubemx的配置界面,调试接口。其他的照着选就行,我也是看别人的教程。
2024-07-27 20:16:35
549
原创 AHT20传感器简单使用记录
在优快云上看了很多文章都是用的模拟IIC读取的,代码太冗余了。也找到有用hal库的,但是读取出来数据不对,发现是代码有些小问题,改了之后就能用了。下面就把改好的贴在下面。使用方法也很简单,初始化之后直接调用读取函数就行。
2024-05-06 10:14:52
357
原创 C语言简易类json格式解析
在使用MQTT时,获取的数据基本上都是json格式的,虽然C语言也可以添加第三方的解析库,但有些资源少的单片机用着还是挺吃力的,所以自己简单写了一个从json格式中获取数据的,说白了就是一个字符串查找。不过这个只会匹配第一个字符串,如果需要匹配不同的,可以传入需要匹配的序号,就只获取对应序号的数据。其实我们需要的数据主要是id,LED,temp后面的值。获取打印出来就是这样的。
2024-04-25 15:50:38
357
1
原创 STM32无法识别芯片或者能识别无法下载,提示flash timeout
4.然后断开连接,再使用keil就能下载了,如果还是报错。就重复刚才修改保护等级那,把需要修改的部分取消勾选,然后再应用更改。我这里直接取消了所有的保护区域。之前打了一块F401的核心板测试,只买了一颗芯片,焊上之后首先是无法识别,当时为了方便,只焊了一部分原件。3.apply应用更改后,就能读出芯片数据了。1.选择Option Bytes。其实是芯片开启了写读写保护,这时stlink就能识别了。2.将保护等级设置为0。但是下载程序还是报错。连接还是提示无法连接。
2024-02-11 23:18:43
1918
原创 HSCMRNN030PA2A3绝压传感器简单使用
压力数据的计算公式,outputmax和outputmin都不变,pressuremax就是传感器测的最大值,我这里是30psi,同理pressuremin就是能测的最小值,我这里是0psi,代码中我计算扩大了100倍。byte1的前两位是状态位,00就是正常,byte1的后6位,和byte2一共有14位是数据,需要把byte1的后6位左移8位再加上byte2的8位共同合成压力数据。里面有个型号表,我用的就是iic协议,0~30psi(1psi=6895pa),温度和压力转化有个公式,参考霍尼韦尔的。
2024-02-02 09:34:24
410
原创 F1C100S F1C200S测试SPI FLASH(25q128fv)
测试没有问题后就能开心的使用flash作为系统的“盘”了,因为看其他编译flash的镜像太麻烦了,后面再自己尝试,这里我直接烧录荔枝派官方编译好的镜像。因为我只是简单测试一下FLASH能否正常使用,所以用了全志sunxi-tools工具,能够便捷的使用USB直接测试与写入FLASH,使用方法参考。,把uboot下载并编译后,会生成flash的镜像,直接运行down_uboot_spiflash.sh的脚本就能下载镜像到flash中了。重新上电就能开机了(不上TF卡,不然TF卡优先级更高)
2024-01-09 21:05:12
974
原创 沁恒CH571软件IIC
下面是IIC的实现函数,我是直接改的其他程序的,忘了是哪copy来的了,需要修改的可能就是用不同屏幕或者其他iic设备需要改一下地址。因为没怎么用这个芯片,所以配置还没有完全搞清楚,就先尝试的软件模拟IIC,毕竟只要有两个GPIO就能用。CH571蓝牙接收,即刻显示内容。我用的是P13和14。
2024-01-09 20:29:04
884
原创 QT简单实现控件运动代码
原始图像和控件是这样的,绿色的为图片。红色的为一个label或者button,要实现的功能就是按下键盘的按键,控制红色向绿色的4个角落运动,类似摇杆的功能,然后还带有松开键盘自动回弹效果。松开后自动回位,这个功能是通过定时器定时判断键盘状态实现的(也包含长按键盘的处理,若不处理,会出现动画反复播放)3.键盘松开后控件自动回位。首先是监听键盘操作,参考。
2023-12-29 10:01:28
519
原创 OLED旋转任意角度显示,含C语言打印
实现了6x8字符和8x16字符以及16x16中文的旋转显示(旋转数组使用的16x16),不过中文在旋转时可能会出现超过显示区域的情况,因为16x16的旋转会超过这个大小,有需要的可以自行根据程序修改。6x8的字符我就不贴了,可以根据8x16的进行修改,只是我用的旋转数组为12x12。在之前90度旋转的基础上,利用旋转矩阵,完成了任意角度旋转的程序。中文会出现超出区域的情况,使用需扩大旋转和显示区域。这里我直接贴出stm32的代码。字符和中文的数组格式如下。
2023-12-29 09:37:42
1297
原创 OLED旋转显示方向,SH1107 软件实现屏幕内容旋转90度显示
因为屏幕驱动芯片自带的智能设置180度,并不带有90度旋转功能,所以自己写了一份简陋程序。这里只以6*8和8*16的字体为例,其他大小或者中文可以自行修改。旋转90度的程序,这里6*8和8*16都可以,只是8*16多了一格。如果显示字符串只需要吧原来的字符显示替换掉就可以了。我直接给出原版和修改后的代码。这里再给出测试用的C语言程序。
2023-12-13 00:26:34
1536
原创 RT-Thread配置STM32的SPI Flash,SFUD,FAL,easyflash流程
说明一下环境和设备:RTthread studio+cubemx,芯片是stm32f429bit6+w25q256fvrtthread版本是4.1创建工程就不说了,只需要基本工程就行,可以参考我之前的文章这里就直接说需要改哪些地方吧,在基础工程(串口正常打印)上,打开这3个功能(可以单独使用sfud或者sfud+fal),打开后修改相应的地方就行。
2023-12-13 00:07:30
1037
原创 TEA5767,RDA5807FM接收简单使用,解析通信数据
看了许多文章,大多都是用的商家提供的代码修改的,虽然代码很全面,但我只是想接收一下FM听一下。就是那种几行代码就能解决,这里我记录一下我使用的代码,,直接就能扫描i2c设备地址,直接发送接收数据,还是挺方便的。接线:RDA5807TEA5767首先还是贴出我参考的文章吧,想学习的可以去原文章看看然后直接贴出我的脚本。
2023-11-07 23:48:46
1380
2
原创 STM32使用RT-thread完成点灯,pwm,按键中断,定时器中断,ADC
开发工具使用的是RT-thread Studio。完成按键中断,adc读取,pwm输出与定时器中断功能
2023-10-24 17:45:10
1316
5
原创 TypeError: only integer scalar arrays can be converted to a scalar index
修改:在使用前转换一下,添加一句。
2023-07-29 01:51:54
246
原创 荔枝派nano用shell脚本点亮oled(ssd1306/sh1107)
由于gcc交叉编译有问题,所以暂时只能用shell命令点亮屏幕了。首先是屏幕初始化init.sh(屏幕地址参考上一篇)虽然只能简单的显示,不过用来测试一下屏幕还是可以的。后面搞好交叉编译器就可以直接C语言驱动了。i2c驱动参考前一篇文章。然后运行,屏幕就亮了。
2023-07-20 13:48:23
423
原创 荔枝派Lichee Pi/planckpi/f1c100s添加i2c并驱动oled(sh1107/ssd1306)
添加i2c的设备树,编译出来进行替换(SD卡中已经有系统的可能需要全部编译uboot,linux,buildroot然后重新写入SD分区中,参考上面的博客)第一句就是写 命令(第一个是设备地址,第二个是oled的命令或者数据寄存器,第三个就是要写的命令或者数据),第二句是写数据(00命令,0x40数据)编译和写入SD卡后,启动系统,默认root,无密码。我们在连接好屏幕之后(具体引脚看设备树中添加的,我的sda是e12,scl是e11)就可以看到oled屏幕点亮了,只是屏幕是画的,因为还没有给显示的数据,
2023-07-19 23:10:08
1161
2
原创 荔枝派licheepi_nano编译uboot记录
如果arm-linux-gnueabi-gcc -v显示的交叉编译器版本没有改变,可以试试把老编译器的文件夹名字改了,然后把新版本的添加到老文件夹中(我也不知道是否有更好的方法)。然后又又又报错了Error: arch/arm/dts/.suniv-f1c100s-licheepi-nano.dtb.pre.tmp:59.1-10 syntax error。注意选择相应的板子,安装合适的交叉编译器,我之前安装的交叉编译器是4.9版本的,编译过程报错,提示编译器版本过低。我是直接改的源码中的变量。
2023-07-18 19:37:34
580
原创 Verilog实现串口收发
主要逻辑参考stm32篇的GPIO模拟串口,接收主要是捕获开始信号,然后定时采样获取8位数据位(未考虑停止位和校验位)使用robei eda仿真结果(发送的仿真信号,然后再将接收的信号输出)代码不是完整代码,仅仅把串口部分截取出来,如需使用请根据实际情况进行更改。
2023-07-12 16:19:03
342
原创 超简单GPIO模拟实现可变波特率异步串口收发(STM32)
使用外部中断捕获数据开始位,关闭中断,然后定时器计数清零重新计时,每隔1/波特率s采样一次数据,然后移位合成一个字节开启中断进入下一个等待接收状态(首先使用逻辑分析仪查看ch340串口数据波形,根据波形写接收逻辑即可。发送更简单,只需要发送开始位后每隔1/波特率s发送一位数据即可(注意使用定时器需要先开启。),最后再发送停止位。
2023-07-06 10:46:55
2017
原创 沁恒CH57x蓝牙(RISC-V)开发记录
沁恒CH57x蓝牙(RISC-V)开发记录,画了块ch571f和ch579m二合一的开发板,ch571是risc-v的芯片,ch579是m0的。之前一直用的stm32,刚接触risc-v开发还是碰到许多需要琢磨半天的问题。
2023-06-08 14:02:38
2502
原创 TCP简易服务端与客户端(Linux)实训学习四
TCP简易服务端与客户端,上面的都是传入main函数的参数,main函数中的形参argc就是参数的个数,**argv就是传入参数的数组(使用方法argv[index])。在本任务中可实现对ip和端口的设定,argv[0]就是"./a.out" argv[1] 是"aaa"这个命令和printf差不多,只是会在print的同时输出最近的错误信息,可以用来打印某些步骤出错(例如socket连接)4:gets有bug,没有长度限制,可以使用fgets(buf,100,stdin);在调用程序时可以传入参数,例如。
2023-06-02 18:15:04
161
原创 使用C语言修图(实训学习三)
bmp图片前54字节存放的是图片的熟悉描述,不能随意修改,图片后面的内容就全是图像信息,一般都是bgr的顺序存放三基色,简单的处理就只需要对rgb值进行修改(一般都是24位,每个基色占用1字节,范围0-255)3 拼接(暂时只能拼相同宽度的图片,不同宽度会错乱)只需要把新生成的图片前一部分图像填充其中一张,后一部分填充另一张。实训安排的任务是用C语言实现bmp图片的拼接(Linux环境)按照亮度转换公式,把三基色合成亮度赋给rgb,即rgb都等于y。1 将原图全变为白色,
2023-05-29 00:14:10
158
1
原创 STM32使用sr04超声波一收一发测距,可实现空间定位
发送端用的一个stm32来控制,发送与接收的同步信号使用的红外,接收端接收到红外信号后开启1us的定时器计时,发送端每个超声波模块发送间隔40ms(避免间隔时间太短,声波反射干扰)。使用的三个模块在不同位置发送超声波,然后接收端得出接收端与三发送端的距离,如果已知三发送端的坐标,根据三个距离值即可计算出接收端的坐标。这里需要用逻辑分析仪或者示波器来查看发送和接收的时间差,进行微调,以及消除某些干扰信号。hal库,这个有问题,还没有修改,可参考标准库的代码修改。
2023-05-11 16:11:41
1131
2
原创 nanopi k2模块编译记录[一]
编译Linux内核出现:usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of `yylloc’;修改scripts/dtc目录下的dtc-lexer.lex.c_shipped文件中找到。kernel编译报错|/bin/sh: 1: bc: not found。
2023-03-17 22:48:17
183
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人