- 博客(15)
- 收藏
- 关注
原创 通过IIC实现OLED屏显示
U8g2是GitHub上一款优秀的开源单色图形库(GUI库),适用于嵌入式设备,开发语言90%为C语言,代码简洁易移植修改,在GitHub上拥有超3.2K Star、2.6K Commit。
2025-10-31 14:07:33
687
原创 STM32F103C8T6基于HAL库移植uC/OS-III
打开启动文件,分别将75行和174行的PendSV_Handler和Systick_Handler改为OS_CPU_PendSVHandler和OS_CPU_SysTickHandler。或链接:https://pan.baidu.com/s/10RqsDRecbmVteWmDv2oUNQ。进入官网下载:http://micrium.com/downloadcenter/将下载的下面5个文件夹粘贴到工程文件MDK-ARM下。CPU,6个文件分散在两个文件夹中。打开app_cfg.h。接下来导入头文件路径。
2025-10-31 13:40:48
452
原创 STM32F103通过I2C协议实现串口温湿度(AHT20)的采集
硬件I2C:依赖专用硬件外设,时序可靠、省资源、引脚固定,适合实际项目开发。软件I2C:通过GPIO和软件模拟时序,引脚灵活、耗资源、适合学习或硬件引脚受限的场景。
2025-10-26 11:13:28
783
原创 STM32输出双LED呼吸灯
PWM(Pulse Width Modulation,脉冲宽度调制)是一种通过改变脉冲信号的占空比(脉冲宽度与周期的比值)来模拟连续电压或控制设备输出的技术。核心原理周期(T):脉冲重复一次的时间(如1ms),频率 = 1/周期(如1kHz)。占空比(D):一个周期内高电平持续时间与总周期的比值(如50%占空比表示高电平持续0.5ms,低电平持续0.5ms)。
2025-10-18 20:59:15
934
原创 STM32使用定时器进行串口通信和点灯
在STM32微控制器中,定时器(Timer)是非常核心的外设之一,功能强大且灵活,广泛用于定时中断、PWM输出、脉冲计数、输入捕获等场景。STM32的定时器种类多样,不同系列(如F1、F4、H7等)的定时器功能略有差异,但核心原理一致。
2025-10-18 18:48:15
1962
原创 STM32采用串口DMA方式通信
DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。DMA用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节。
2025-10-18 14:43:46
1970
原创 STM32采用HAL库中断方式UART串口通信
时钟配置决定了串口波特率的准确性:USART1 挂载在 APB2 总线上,此处 APB2 时钟为 72MHz,是 STM32 常用的稳定配置。2.串口接收中断回调函数。1.宏定义与全局变量。
2025-10-18 12:52:36
422
原创 基于 STM32CubeMX 与 Keil 的 USART 轮询通信实验:连续发送与指令控制
轮询方式(Polling)通过 CPU 主动查询外设状态来完成数据收发,逻辑简单、资源占用少,适合对实时性要求不高的场景。与上一版完全一致,通过轮询TXE(发送寄存器空)和TC(发送完成)标志,逐字节发送"hellowindows!(2)新增核心函数:UART_Polling_Receive(轮询接收)send_data:存储待发送的字符串,\r\n用于上位机换行显示。(4) 保留的发送函数(UART_Polling_Transmit)(3) 核心函数:UART_Polling_Transmit。
2025-10-17 23:32:05
894
原创 电脑间通过串口进行文件传输
串口通信是一种通过单条或少数几条数据线逐位传输数据的异步通信方式,核心特点是“低成本、低速率、远距离”,广泛用于设备间短距离数据交互。
2025-10-16 21:30:59
829
原创 STM32基于HAL库的LED流水灯及中断
由于我们需要实现的效果为当开关接高电平时,LED流水灯工作,接低电平时,LED流水灯停止工作。因此,我们可以设置一个变量,当该变量为1的时候流水灯进行工作,当该变量为 0的时候流水灯不进行工作。而这个变量的改变,就取决于中断函数的内部,当接高电平的时候在中断函数的内部可以将该变量置一,当接低电平的时候,可以在中断函数内部将该变量置零。(5)选择端口输出设置,选择需要的端口,点击设置GPIO_OUTPUT,我选择的是PA1,PA4,PB0将这三个引脚均设置为GPIO_OUTPUT。传输成功后,点击push。
2025-10-08 20:04:35
628
原创 深入探究 Ubuntu 与 STM32 下 C 程序的存储分配及地址映射
通过在 Ubuntu 和 STM32 平台的编程验证与对比分析,我们清晰地看到了不同架构下 C 程序存储分配的差异,也加深了对 STM32 存储器地址映射的理解。Ubuntu 作为通用计算机平台,受操作系统虚拟内存管理影响,存储分配更灵活;而 STM32 作为嵌入式平台,存储器地址映射固定,存储资源相对有限,需更谨慎地管理内存。这些知识对于深入理解 C 语言程序的运行机制以及嵌入式系统开发都具有重要意义。
2025-10-03 20:47:48
1864
原创 使用gcc和gcc的伙伴
Linux 下的库文件分为两大类分别是动态链接库(通常以.so结尾)和静态链接库(通常以.a结尾),二者的区别仅在于程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。这些选项大多以-W开头,其中最有价值的当数-Wall了,使用它能够使GCC产生尽可能多的警告信息。Linux下的大多数函数都默认将头文件放到/usr/include/目录下,而库文件则放到/usr/lib/目录下。gcc -L /usr/lib -static 静态链接库文件名 生成.o文件 -o 生成可执行文件。
2025-10-03 15:17:16
732
原创 用gcc生成静态库和动态库&静态库.a与.so库文件的生成与使用
从程序hello运行的结果中很容易知道,当静态库和动态库同名时,gcc命令将优先使用动态库,默认去连/usr/lib和/lib 等目录中的动态库,将文件libmyhello.so复制到目录/usr/lib中即可。解决办法:将libmyhello.so复制到目录/usr/lib中,因为运行时是在/usr/lib中找到库文件的。创建动态库: gcc -shared -fPIC -o libmyhello.so hello.o。执行后输入ls命令验证,目标需出现x2x.o x2y.o main.o。
2025-10-02 17:54:00
726
原创 Ubuntu系统使用gcc和Makefile编译c程序(嵌入式基础)
本次实验覆盖Ubuntu系统配置与C语言跨环境开发,我系统掌握了多方面技能:一是在Windows通过虚拟机安装Ubuntu后,能根据系统版本(如20.04对应focal)修改国内镜像源,解决软件下载慢的问题,同时熟练运用cdmkdir等常用命令,以及nano文本编辑器编写代码;二是完成“Hello World”程序的编写、编译与运行,掌握gcc编译器的基础使用;三是编写主程序main1.c与子程序sub1.c,实现。
2025-09-21 00:17:13
1004
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅