舵机&数据处理&stm32内存之堆栈溢出(遇到的问题)

947033916-fwh 947033916-fwh     2023-01-12     642

关键词:

产品名称:TOWER PRO(辉盛)大扭力舵机MG996R (MG995升级产品)6v/11Kg
厂家编号:MG996R
产品净重: 55g
产品尺寸: 40.7*19.7*42.9mm
产品拉力: 9.4kg/cm(4.8V), 11kg/cm(6V)
反应速度: 0.17sec/60degree(4.8v) 0.14sec/60degree(6v)
工作电压: 4.8-7.2V
工作温度: 0℃-55℃
齿轮形式: 金属齿轮
工作死区: 5us (微秒)
适合机型: 50级-90级甲醇固定翼机以及26cc-50cc汽油固定翼飞机等

后又改用别的舵机:
硬件问题:
问题一
舵机的精准度和响应速度。
用按键调整舵机,
674-中值,  左极限:502-左29度, (674-502)/30=5.73。每度5.73。 5.73/10000*20=0.01146ms=11.46us.   工作死区:5us。右极限:(865-674)*  
但是我用按键调整时从中值。向右打舵时需加60  就是增加0.12ms脉冲宽度才会第一次转,左边是好的。然后右打30度或者左打30度,回舵的时候,反应很慢,也是需要加50到60才开始第一次回舵。之后就是正常的。
打算换一个舵机,来试试。
 
问题三:
摄像头加滤光片后,摄像头自动进入白平衡调节。此时应该将滤光片去掉,调好白平衡后,再戴上滤光片。
软件问题:
问题一:
遇到的问题:测试各个模块代码都没有问题,读出全局变量的值被改变了。原来是函数嵌套太深了,把栈撑爆了。
stm32内存分布-栈,堆,静态存储区。
栈:  Stack_Size      EQU     0x00000400  .s文件内核启动代码中的。规定栈的大小。局部变量的内存都分布在栈上,函数地调用也会在栈上,定义局部变量避免大数组,以防栈溢出。
技术分享图片
栈的大小:0x400=1024个字节大小。
堆: Heap_Size       EQU     0x00000200  规定堆的大小。malloc或者new来申请堆内存,用完后然后free或者delate释放内存,如果未释放则出现内存泄漏,
静态存储区:static关键字,全局变量,
解决办法:我们没有用到堆内存malloc来申请内存。将堆内存改为0,那么内存分布就是静态存储区+栈了。
.c文件先汇编成.o文件,然后在链接成可执行文件,
 
问题二:
数据大小端的问题处理数据。
接受到的数据是高字节在前,低字节在后,得处理一下,
问题三:
舵机PD算法的参数确定,
问题四:
摄像头采集的数据有跳变,是因为摄像头电源和mcu的电源必须统一。于是乎就采用软件均值滤波。各种尝试。。但是最后发现是硬件的供电问题。困扰好久。才解决了数据跳变的问题。(自己差点都准备换别的摄像头了)。特别悲催。。坑爹。。。
 
检查问题步骤:
1.先观察摄像头数据,是否输出。
2.再看X,Y,编码器计数。
 
 
/ ******************这里摘自网友博客**********************/
编译工程:
在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息:

Program Size: Code=6320  RO-data=4864  RW-data=44  ZI-data=1636  
代表的意思:
Code :是程序中代码所占字节大小
RO-data :程序中所定义的指令和常量大小 (个人理解 :Read Only)
RW-data :程序中已初始化的变量大小   (个人理解”:Read/Write)
ZI-Data :程序中未初始化的变量大小     (个人理解 :Zero Initialize)

ROM(Flash) size = Code+RO-data+RW-data;

RAM size = RW-data+ZI-data

可以通过.map查看占用的flash和ram大小

 
/ ******************这里摘自网友博客**********************/
 
 
 
 
 
 

















STM32 & TLV5628 SPI 通信

...但当前的问题是以下两件事之一:1)显示完全相同信息的数据线和时钟线或2)数据线显示信息,但时钟线上没有。无论如 查看详情

stm32&freertos&kfifo(巧夺天工)

...******* 文件名:kfifo.c** 文件描述:该文件包含的kfifo的处理函数** 创建人:GXP**创建日期:2016年8月9日16:13:06** 版本号:1.0** 修改记录:无**本文参考博客地址:http://blog.csdn.net/linyt/article/deta 查看详情

CMSIS & STM32,如何开始? [关闭]

】CMSIS&STM32,如何开始?[关闭]【英文标题】:CMSIS&STM32,Howtobegin?[closed]【发布时间】:2021-09-1212:28:07【问题描述】:我想在STM32上使用CMSIS启动项目。网上冲浪,没找到具体教程。一些使用SPL(ST已停止)启动项目。我想要... 查看详情

排序算法之堆排序(代码片段)

1#include<iostream>2#include<vector>3#include<algorithm>45usingnamespacestd;67//大根堆89voidpush_up(vector<int>&heap,intheapPosize)1011intt=heapPosize;12while(t/2&&he 查看详情

stm32f407&f429&h7的dsp教程第34章滤波器基础知识

...d&tid=94547第34章      滤波器基础知识在数字信号处理中,滤波器占有及其重要的地位。数字滤波器是语音处理,图像处理,模式识别,频谱分析等应用的基本处理算法。从本章起,我 查看详情

stm32堆和栈(stm32heap&stack)

关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘:刚接手STM32时,你只编写一个intmain(){while(1);}BUILD://ProgramSize:Code=340RO-data=252RW-data=0... 查看详情

stm3232-bitarmcortexmcus&&mpus

一、STM3232-bitArmCortexMCUs二、STM32ArmCortexMPUs 查看详情

八大排序之堆排序

#pragmaoncevoidAdjustDown(int*a,size_tsize,size_tparent) size_tchild=parent*2+1; while(child<size) if(child+1<size&&a[child+1]>a[child]) child++; if(a 查看详情

stm32h7第3章threadxusbx协议栈移植到stm32h7(代码片段)

教程更新中:ThreadXUSBX协议栈教程更新记录贴,前5章发布(2021-10-11)-uCOS&uCGUI&emWin&embOS&TouchGFX&ThreadX-硬汉嵌入式论坛-PoweredbyDiscuz!http://www.armbbs.cn/forum.php?mod=viewthread&ti 查看详情

stm32dfu(devicefirewaveupdate)更新设备程序(bootload&iap)参考文献

文档:AN2557STM32F10xin-applicationprogrammingusingtheUSART...介绍了USART_IAP的使用方法;AN2606STM32microcontrollersystemmemorybootmode...STM32全系列的bootloader的介绍;AN3154CANprotocolusedintheSTM32bootloader...拥有CAN口b 查看详情

stm32舵机控制板串口找不到

参考技术Astm32舵机控制板串口找不到解决方法:STLINK只是一种4线下载和调试程序的接口和JLINK类似,串口可以用USB转TLL再接到串口引脚,或者买个蓝牙模块接串口 查看详情

stm32h7第22章threadx动态内存管理(代码片段)

...m.php?mod=viewthread&tid=99514第22章      ThreadX动态内存管理本章节为大家讲解ThreadX动态内存管理,ThreadX支持固定数据大小的内存块式分配,也支持类似C库的malloc方式分 查看详情

stm32f429第3章threadxusbx协议栈移植到stm32f429(代码片段)

教程更新中:ThreadXUSBX协议栈教程更新记录贴,前5章发布(2021-10-11)-uCOS&uCGUI&emWin&embOS&TouchGFX&ThreadX-硬汉嵌入式论坛-PoweredbyDiscuz!http://www.armbbs.cn/forum.php?mod=viewthread&ti 查看详情

stm32f407第3章threadxusbx协议栈移植到stm32f407(代码片段)

教程更新中:ThreadXUSBX协议栈教程更新记录贴,前5章发布(2021-10-11)-uCOS&uCGUI&emWin&embOS&TouchGFX&ThreadX-硬汉嵌入式论坛-PoweredbyDiscuz!http://www.armbbs.cn/forum.php?mod=viewthread&ti 查看详情

stm32cube串口接收任意长度数据

voidUSART3_IRQHandler(void){/*USERCODEBEGINUSART3_IRQn0*/uint32_ttmp_flag=0;uint32_ttemp;tmp_flag=__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE);if((tmp_flag!=RESET)){  __HAL_UART_CLEAR_FEFLAG(&h 查看详情

stm32的串口采用dma方式接收数据测试(转)

STM32的串口采用DMA方式接收数据测试  本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考链接:http://www.amobbs.com/forum.PHP?mod=viewthread&tid=5511863&highlight=dma%E6%8E%A5%E6%94%B6   查看详情

stm32h750获取ov7670摄像头图像及上位机解码(一维码&二维码)(代码片段)

...50对30万像素OV7670摄像头进行图像捕获,并通过串口将数据送到上位机软件进行解码。本文可作为STM32H7及STM32F7系列驱动OV7670摄像头的代码参考,通过DCMI的CROP功能 查看详情

stm32f429第22章threadx动态内存管理(代码片段)

...m.php?mod=viewthread&tid=99514第22章      ThreadX动态内存管理本章节为大家讲解ThreadX动态内存管理,ThreadX支持固定数据大小的内存块式分配,也支持类似C库的malloc方式分 查看详情