- 博客(43)
- 收藏
- 关注
原创 arm linux 移植 udhcp 与 使用
在一些网络环境下,需要静态IP不够现实,需要使用DHCP进行自动获取IP地址。udhcpc是一个面向嵌入式系统的非常小的DHCP客户端,字母的缩写微μ- DHCP -客户端client(μDHCPc)。前提:在KERNEL中需要将 Packet socket(CONFIG_PACKET)和IP: DHCP support(CONFIG_IP_PNP_DHCP)编译进内核或编译成模块。
2026-08-28 15:00:18
209
原创 V821 AvaotaF1 Pico _ 全志Vision 如何运行smart IPC
1. 编译内核-加入ftp功能2. 加入smart IPC保存,退出。make -j2等待 SDK 编译完成,会在out目录下生成固件.将固件拷贝出来,准备烧录。
2026-08-15 09:55:47
224
原创 esp32 IDF使用方法
esptool.py --port COM3 --baud 115200 write_flash -z 0x0 TFCAM.bin #下载。idf.py set-target esp32s3 #配置环境。idf.py build #编译。flash #下载。
2026-08-09 14:38:35
222
原创 虚拟机配置NFS服务器,开发板可直接运行程序
1. ubuntu虚拟机端安装nfs服务器。2.ubuntu虚拟机开启共享文件夹。3.ubuntu虚拟机配置共享权限。4.ubuntu虚拟机查看共享结果。
2026-08-05 14:25:39
189
原创 vscode远程访问ubuntu虚拟机写代码(ssh远程控制)
2.vscode安装Remote - SSH。1.ubuntu需要安装并打开ssh。
2026-08-02 16:06:11
46
原创 C语言弱定义
一般用在库文件中,库文件中定义一个弱函数,用户可以重写这个弱函数,比如嵌入式C库中的fputc函数,定义为弱函数,用户可以在自己的工程中重写这个函数,把打印输出到串口。1.弱函数不能在同一个文件中出现(这样也没意义);2.一般用在嵌入式编译其中,桌面编译器没有这种定义。// 默认空实现 / 或者半主机调试。
2026-04-23 11:59:59
31
原创 定义自己的调试函数
/自己的串口打印函数。有些情况,系统可能关闭了fputc函数,导致printf不起作用,那如何定义自己的“printf”呢?// 自己的打印函数(替代 printf)
2026-04-23 11:33:49
27
原创 如何转换 c语言代码的编码格式
我们经常接触到 不同项目的C语言代码,然而编码格式可能大不相同,有的是GB/utf-8/windows等。我写了一个python 转换格式的代码。统一转化为utf-8。
2026-04-20 10:00:30
29
原创 使用vscode查看c语言工程代码
/ 全局搜索:只包含 .c .h,排除所有其他文件。// 只隐藏非 .c/.h 的文件(文件夹完全保留)这样可以在vscode中只显示 c h文件。
2026-04-16 11:15:39
106
原创 stm32f103c8t6使用PWM控制舵机
通常需要 20ms (也就是 50Hz) 的总周期。这是它的“心跳”,如果心跳太快或太慢,舵机可能不工作或乱抖。:在这个 20ms 的周期里,高电平持续多久,决定了舵机转到哪个角度。外部 MCU(如 Arduino/STM32)输出固定宽度的 PWM。上面这些参数直接设置为固定的即可,周期正好是20ms。// 舵机 PWM 标准:20ms 周期。只要你给它一个固定宽度的脉冲,它就会转到。实际角度 < 目标角度 → 电机正转。实际角度 > 目标角度 → 电机反转。:实时检测当前输出轴角度。
2026-04-15 10:36:52
256
原创 stm32f103c8t6 定时器中断
/定时器3的频率为72M/7200=10K,自动重装载为5000-1,那么定时器周期就是500ms。//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.//Ft=定时器工作频率,单位:Mhz。//arr:自动重装值。//psc:时钟预分频数。
2026-02-16 17:31:26
57
原创 使用stm32CubeProgrammer连续升级程序
目前为了批量升级方便,初步整理了一个快速升级stm32程序的方法(虽然还不是很快,但作为第一版记录一下)1. 安装SetupSTM32CubeProgrammer-1.3.0.exe。3.点击 连刷.bat 开始自动刷机。2.根据自己的环境配置路径。
2026-02-06 15:16:12
55
原创 stm32f103c8t6的栈底、栈大小、栈顶怎么查看
0x20001ae0(栈底) +0x800(栈大小 ) = 0x2002ee0(栈顶)RAM存放 .data + ZI + 栈 + 堆。bin文件中的前四个字节就是栈顶。最后一行就是分配的栈信息。查看.map文件中的。
2026-01-23 22:08:49
152
原创 stm32f103c8t6 bin文件中被优化的数据
但没有使用,会在.map文件的Removing Unused input sections from the image.假如有一些全局变量没有使用,keil编译过程中会直接剔除他们。
2026-01-21 16:08:03
151
原创 stm32f103c8t6 bin文件 flash数据布局
这个还是从.map文件中查看。找到 Execution Region ER_IROM1可以看到0x8000000处是存放堆栈指针和异常向量表。后续一次是代码段,最后的data其实不是数据段,而是数据段从flash拷贝到ram时的拷贝规则。解释: Execution Region ER_IROM1 这代表这个flash内存布局仅仅列出了可执行的flash文件(这个是我猜测的,还不太确定)。数据段可定在flash中存放着,但Execution Region ER_IROM1 中并未给出。但在 Execut
2026-01-21 16:00:22
233
原创 stm32f103c8t6 DWT 时间戳(用来计算软件代码执行时间)
以上代码是在72M时钟下计算的,最长统计时长约为60s。时钟频率 36MHz:最长计时 ≈ 120s。时钟频率 48MHz:最长计时 ≈ 90s。时钟频率 64MHz:最长计时 ≈ 67s。
2026-01-16 14:03:47
146
原创 一个栈溢出的例子
任务栈大小一开始设为80,DEBUG_BUFFER_SIZE为1024,当没有这个memset时,系统正常运行,当加上这个memset后,把整个栈给清零了。本来应该是串口收到数据后才打印,结果变为收到数据(仅仅发了一次)后便疯狂打印。这是因为清0了太多数据,导致破坏了OSQPend的阻塞。这是一个串口接收任务。
2026-01-16 08:54:01
168
原创 stm32f103c8t6串口清中断
代码表述上可以写成一样的格式,因为USART_GetITStatus函数内部读取了状态寄存器SR。接收完成中断(IDLE ): 读状态寄存器(SR) + 读数据寄存器(DR)。溢出中断(ORE):读状态寄存器(SR) + 读数据寄存器(DR)。接收中断(RXNE):读数据(ReceiveData)就能清。
2026-01-15 14:13:54
156
原创 串口接收流程
以上中断函数,串口收到‘A’后,进入接收中断,之后打印111111,打印过程中后续数据B到来并放到DR寄存器后,一直没有读取(CPU正在忙于打印11111),导致后续的CDE无法被放入DR,产生数据溢出中断,最后又产生接收完成中断。所以后续会打印222222.假如串口对端在发送ABCDE。
2026-01-15 12:31:46
191
原创 GD32F303RCT6 UCOS 实现串口收发框架
基于GD32F303RCT6 UCOS 实现串口收发框架,并添加了 事件、消息队列的使用示例。
2026-01-11 09:55:38
95
原创 stm32f103c8t6 呼吸灯
开启pwm后cnt开始向上计数,小于500时,输出有效电平,大于500时输出无效电平,最终涨到1000时,归0重新计数。设置 TIM_SetCompare2(TIM2, 500);即比较寄存器值为500,代表计数到500次后翻转电平;比如:stm32f103c8t6单片机 主频是72M,设置72分频,频率变为1M,每1us跳一下。另外,TIM_SetAutoreload(TIM2, 999);这个函数可以重新设置ARR寄存器。设置计数周期 (ARR) 设为 999 (代表每个周期跳动 1000 次);
2026-01-09 11:14:13
193
原创 逻辑分析仪抓取串口数据
同时调试串口通信的上下位机时,为了避免上位机和下位机人员相互扯皮,上位机说我发数据了,但是下位机没回复数据。下位机人员又说我没收到上位机的数据!还有一点,如果想看看通信双方的时序,比如发送数据后多少ms收到数据,逻辑分析仪便派上用场了。这时候有逻辑分析仪,抓取一下数据就一目了然了。这里把两根线两两连在一起了,是为了同时连接逻辑分析仪。第一步:先用串口连一下:收、发、地。设置逻辑分析仪,选择uart协议。这样连线完成,就可以抓数据了。点击run 就可以抓取数据了。下面再连上逻辑分析仪。
2026-01-07 15:25:25
286
原创 C语言 位操作
多用在传输协议中,为了减少传输字节数,用一个字节表示多个 标志位。代码中FlagsReg仅仅占用1个字节便可以表示3个数。位操作:直接操作某个比特位。主要来节省存储空间。
2026-01-06 19:17:52
121
原创 stm32f103c8t6 FLASH被锁定了怎么办?
2. flash被写锁定了(执行过FLASH_EnableWriteProtection(某几个页));),如果下载需要用到“那几个页”导致无法下载程序;1. flash被读锁定了(执行过FLASH_ReadOutProtection(ENABLE);),导致无法下载程序;这样就可以连上了,然后擦除整个芯片(点击橡皮擦)。3.后者想查看一下flash中存储的内容。去掉写锁定 apply即可。
2026-01-06 10:37:32
267
原创 获取stm32f103c8t6的芯片ID
在 STM32F103 系列中,全球唯一 ID(96位,即12字节)存储在系统存储区中。这个 ID 在芯片出厂时烧录,对于 STM32F103C8T6,UID 的基地址是 0x1FFFF7E8。
2026-01-05 09:08:28
505
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅