单片机
文章平均质量分 59
山间朝暮-CanEve
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
上电单次复位触发电路
本文介绍了一种通过开关控制产生单次脉冲以唤醒单片机的电路设计。当S1A和S2A开关断开时,示波器A端口保持3V高电平。闭合S2A可手动拉低电平,用于唤醒单片机。闭合S1A时,模拟电源接入,经过R4和C2滤波后给C1充电,期间Q1导通,示波器A端口被拉低,产生单次脉冲。C1接近充满时,Q1断开,端口恢复高电平。断开S1A后,R6和R2对C1放电,端口保持高电平。该设计通过控制开关实现单片机的唤醒和复位。原创 2025-05-13 17:02:57 · 472 阅读 · 0 评论 -
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 · 240 阅读 · 0 评论 -
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 · 948 阅读 · 0 评论 -
BQ4050系列SMBus寄存器块数据读取
先写入0x44寄存器要读取的块地址,然后再读取0x44,但需要注意的是,发送和接收都包含数据的长度,发送还需要crc8校验。原创 2025-03-27 11:26:28 · 989 阅读 · 0 评论 -
AB32VG1开发踩坑与解决记录
使用RT-Thread下载开发板支持包下载RISC-V-GCC编译包创建模板工程并编译,但报错。原创 2025-01-19 16:33:39 · 491 阅读 · 0 评论 -
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 · 503 阅读 · 0 评论 -
CH571F蓝牙orUSB摇杆鼠标
然后是主循环,虽然好像蓝牙也有个类似于任务排序的函数,但不是很会用,所以并没有用自带的调度程序,而蓝牙程序中不能长时间被其他程序占用,不然会丢失蓝牙连接,所以我没有用延时,使用的定时器计时。程序基本上是基于官方的例程上改的,用到的例程有:蓝牙的HID_Mouse,USB的CompoundDev,还有ADC,按键中断。主要原理就是ADC采集采集摇杆电压,通过蓝牙HID或者USB的HID发送给电脑或者手机,实现鼠标功能。最后是主循环,里面就是蓝牙、USB和ADC的调用程序。原创 2024-08-04 22:54:53 · 1108 阅读 · 0 评论 -
CH571F基于官方模版创建工程
直接使用MounRiver创建的工程只有最简单的串口和GPIO功能,其他PWM和SPI等驱动基本上都有,但蓝牙和USB只有参考官方的示例来,全部自己写属实有点麻烦了,而且还需要添加BLE的库。使用WCHISP连接芯片(我这里用的usb连接,先断电,按住boot,然后再接USB上电,会自动识别,选择程序文件(导出程序文件的方法可以看我很久以前的一片文章))还有APP下的三个文件(其中有一个是main,我直接替换的原本创建的文件中的内容,记得保存文件修改 )2.打开官方的例程(我这里用的BLE鼠标的工程)原创 2024-07-28 21:01:45 · 1073 阅读 · 0 评论 -
STM32F103 RT-thread配置LCD的FMC
然后把FMC初始化代码从main.c中拷贝出来,放到其他编译文件中(我是放在stm32f1xx_hal_msp.c中)按照参考教程配置,在最后你会发现屏幕没有反应,因为没有初始化代码,而如果取消掉参考文章所注释的内容也会报错,类似这样的。我选的的标准版,没有选择基于开发板,因为感觉基于开发板很多都已经配置好了(哈哈,主要是学习配置流程)使用的正点原子F103ZET6开发板,屏幕是一块4.3寸的TFTLCD,接下来直接讲配置流程。点开cubemx的配置界面,调试接口。其他的照着选就行,我也是看别人的教程。原创 2024-07-27 20:16:35 · 794 阅读 · 0 评论 -
AHT20传感器简单使用记录
在优快云上看了很多文章都是用的模拟IIC读取的,代码太冗余了。也找到有用hal库的,但是读取出来数据不对,发现是代码有些小问题,改了之后就能用了。下面就把改好的贴在下面。使用方法也很简单,初始化之后直接调用读取函数就行。原创 2024-05-06 10:14:52 · 491 阅读 · 0 评论 -
STM32无法识别芯片或者能识别无法下载,提示flash timeout
4.然后断开连接,再使用keil就能下载了,如果还是报错。就重复刚才修改保护等级那,把需要修改的部分取消勾选,然后再应用更改。我这里直接取消了所有的保护区域。之前打了一块F401的核心板测试,只买了一颗芯片,焊上之后首先是无法识别,当时为了方便,只焊了一部分原件。3.apply应用更改后,就能读出芯片数据了。1.选择Option Bytes。其实是芯片开启了写读写保护,这时stlink就能识别了。2.将保护等级设置为0。但是下载程序还是报错。连接还是提示无法连接。原创 2024-02-11 23:18:43 · 2241 阅读 · 0 评论 -
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 · 521 阅读 · 0 评论 -
沁恒CH571软件IIC
下面是IIC的实现函数,我是直接改的其他程序的,忘了是哪copy来的了,需要修改的可能就是用不同屏幕或者其他iic设备需要改一下地址。因为没怎么用这个芯片,所以配置还没有完全搞清楚,就先尝试的软件模拟IIC,毕竟只要有两个GPIO就能用。CH571蓝牙接收,即刻显示内容。我用的是P13和14。原创 2024-01-09 20:29:04 · 1202 阅读 · 0 评论 -
OLED旋转任意角度显示,含C语言打印
实现了6x8字符和8x16字符以及16x16中文的旋转显示(旋转数组使用的16x16),不过中文在旋转时可能会出现超过显示区域的情况,因为16x16的旋转会超过这个大小,有需要的可以自行根据程序修改。6x8的字符我就不贴了,可以根据8x16的进行修改,只是我用的旋转数组为12x12。在之前90度旋转的基础上,利用旋转矩阵,完成了任意角度旋转的程序。中文会出现超出区域的情况,使用需扩大旋转和显示区域。这里我直接贴出stm32的代码。字符和中文的数组格式如下。原创 2023-12-29 09:37:42 · 1712 阅读 · 0 评论 -
OLED旋转显示方向,SH1107 软件实现屏幕内容旋转90度显示
因为屏幕驱动芯片自带的智能设置180度,并不带有90度旋转功能,所以自己写了一份简陋程序。这里只以6*8和8*16的字体为例,其他大小或者中文可以自行修改。旋转90度的程序,这里6*8和8*16都可以,只是8*16多了一格。如果显示字符串只需要吧原来的字符显示替换掉就可以了。我直接给出原版和修改后的代码。这里再给出测试用的C语言程序。原创 2023-12-13 00:26:34 · 2232 阅读 · 0 评论 -
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 · 2254 阅读 · 1 评论 -
STM32使用RT-thread完成点灯,pwm,按键中断,定时器中断,ADC
开发工具使用的是RT-thread Studio。完成按键中断,adc读取,pwm输出与定时器中断功能原创 2023-10-24 17:45:10 · 1590 阅读 · 4 评论 -
荔枝派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 · 1412 阅读 · 2 评论 -
超简单GPIO模拟实现可变波特率异步串口收发(STM32)
使用外部中断捕获数据开始位,关闭中断,然后定时器计数清零重新计时,每隔1/波特率s采样一次数据,然后移位合成一个字节开启中断进入下一个等待接收状态(首先使用逻辑分析仪查看ch340串口数据波形,根据波形写接收逻辑即可。发送更简单,只需要发送开始位后每隔1/波特率s发送一位数据即可(注意使用定时器需要先开启。),最后再发送停止位。原创 2023-07-06 10:46:55 · 2530 阅读 · 0 评论 -
沁恒CH57x蓝牙(RISC-V)开发记录
沁恒CH57x蓝牙(RISC-V)开发记录,画了块ch571f和ch579m二合一的开发板,ch571是risc-v的芯片,ch579是m0的。之前一直用的stm32,刚接触risc-v开发还是碰到许多需要琢磨半天的问题。原创 2023-06-08 14:02:38 · 3736 阅读 · 0 评论 -
STM32使用sr04超声波一收一发测距,可实现空间定位
发送端用的一个stm32来控制,发送与接收的同步信号使用的红外,接收端接收到红外信号后开启1us的定时器计时,发送端每个超声波模块发送间隔40ms(避免间隔时间太短,声波反射干扰)。使用的三个模块在不同位置发送超声波,然后接收端得出接收端与三发送端的距离,如果已知三发送端的坐标,根据三个距离值即可计算出接收端的坐标。这里需要用逻辑分析仪或者示波器来查看发送和接收的时间差,进行微调,以及消除某些干扰信号。hal库,这个有问题,还没有修改,可参考标准库的代码修改。原创 2023-05-11 16:11:41 · 1526 阅读 · 8 评论 -
ESP8266访问https地址,ESP32
ESP8266访问https地址,ESP32访问https地址原创 2023-03-08 20:16:16 · 2705 阅读 · 5 评论
分享