你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【STM32F429心得\疑问】使用STM32F103系列单片机后的一些感受

[复制链接]
浩子-2030931 发布时间:2014-4-29 14:25
        本人对四轴飞行器很感兴趣,所以打算花课余时间自己DIY一个四轴。我是2014年2月16日的样子开始动手的,寒假在家看了一些四轴相关的资料。由于是只四轴小菜鸟,所以只能先参考别人开源的程序,所以帖子中有什么疏漏、不足之处,还希望大家多多指教。我现在的飞控主要参考的是匿名科创的小四开源程序,只是我把它改成了大四的飞控程序,其他的还参考了KK、MWC、WKM的开源程序。之前只拿51、AVR、MSP430单片机做过东西,考虑到ARM单片机刚入门,就选择了入门级的STM32F103系列的单片机作为飞控的主控芯片,打算后期再升级到更高级的系列,比如STM32F4系列的芯片。
        下面上几张调试四轴和PCB板的图片,有图有真相~:
 
pcb-butterfly-成品.PNG

 

图1 MINI四轴飞控板

pcb-rotor-成品.PNG

 

图2  STM32F103RBT6最小系统板

迷你四轴飞行器实物.jpg

 

图3  MINI四轴实物

室内调试.jpg

 

图4  室内调试

室外调试.PNG

 

图5  室外调试

   
    下面是个人使用了STM32F1系列单片机后的一些感受:
STM32F1系列不同型号单片机之间的引脚的兼容性方便了程序的兼容,如果你用的是资源较少的单片机,当你想升级为资源更多的单片机时,很多时候可以只做很少的修改就把程序移植到后者上面,然后再根据你的需求进行扩展,非常方便。
STM32F103RBT6上的资源做一般的应用还是足够了,用起来还算方便,除了有些奇葩的硬件IIC。如果四轴只由MPU6050、接收机(四通道)、电调、NRF2401无线模块、电池电压测量几个部分组成,即采用了一条IIC总线、四路PWM输入、四路PWM输出、一条硬件SPI总线、一路AD,那么STM32F103RBT6的资源是够用的。目前,四轴用了以上几个部分,已经能在遥控器下比较平稳地飞行。但是,当我加入气压计、磁力计、GPS、超声波测距、液晶等模块时STM32F103系列的单片机就有些吃不消了,也许硬件方面可以采用更多资源的型号,但是STM32F103的72M速度限制了它的处理能力,如果各模块的时间安排得不够高效,很可能不能让整个系统正常地跑起来,即使能勉强运行,速度也是很慢的。当我在基本部分上再加了四路电机测速之后,感觉到NRF2401无线模块向上位机传输数据的速度明显受到了影响,有时数据传输还会中断。
为了解决当前的问题,我打算后期采用STM32F4系列单片机进行制作,同时将采用实时系统来搭建飞控板的软件部分。后面我希望四轴能通过GPS实现定高、定点飞行和自主巡航的功能,当然为了好玩还可以加入比较炫的高难度动作,但是这些功能的实现必须依靠强大的处理器才能够做到。STM32F429/39系列采用最新的180MHz的ARM Cortex-M4处理器内核,可取代当前的基于微控制器和中低端独立数字信号处理器的双片解决方案,或者将两者整合成一个基于标准内核的数字信号控制器。微控制器与数字信号处理器整合还可提高能效,让用户使用支持STM32的强大研发生态系统。STM32F4产品内置意法半导体的自适应实时(ART)加速技术,进一步增强了ARM Cortex-M4内核的处理性能。内置双区闪存的微控制器可实现读写同步操作,有助于保护存储器内容。此外,该系列产品还增加外部高速SDRAM模块接口,从而为客户提供一个经济的外部SRAM存储器选择,这个最新的外存接口还有一个84MHz的32位宽的数据总线。这么强大的MCU应该完全能胜任这些需求,不管是硬件资源还是实时性。

下面是我用定时做输入捕获和PWM输出时遇到的问题:
(1)某个定时器的捕获中断和定时器中断同时打开,是否可以通过标志位合理的分配各通道的工作?
(2)定时器1的CH3和CH4无捕获,还不断的进入中断,中断函数是正的,不知初始化设置时哪里出了问题,程序如下:
采用的芯片是STM32F103RBT6。
void Tim1_Pwm_In_Speed_Init(void)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        TIM_ICInitTypeDef  TIM_ICInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure);

        TIM_DeInit(TIM1);

        TIM_TimeBaseStructure.TIM_Period = 0xffff;                     
        CLK = 72000000/TIM_Prescaler
        TIM_TimeBaseStructure.TIM_Prescaler=179;                         
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;           

        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
        TIM_TimeBaseStructure.TIM_RepetitionCounter=0x0;
        TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;
        //TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;  
     TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; 
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;          
        TIM_ICInitStructure.TIM_ICFilter = 0x0;                        
        TIM_PWMIConfig(TIM1, &TIM_ICInitStructure);       

        TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
        //TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;  
      TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;  
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;        
        TIM_ICInitStructure.TIM_ICFilter = 0x0;                        
        TIM_PWMIConfig(TIM1, &TIM_ICInitStructure);
       
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
        //TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;  
     TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;  
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;       
        TIM_ICInitStructure.TIM_ICFilter = 0x0;                       
        TIM_PWMIConfig(TIM1, &TIM_ICInitStructure);
       
        /*TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
        //TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_BothEdge;  
     TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;  //ÉÏÉýÑØ²¶»ñ
        TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
        TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;          
        TIM_ICInitStructure.TIM_ICFilter = 0x0;                        
        TIM_PWMIConfig(TIM1, &TIM_ICInitStructure);
       
        TIM_ClearFlag(TIM1, TIM_FLAG_Update);

        /* Enable the CC1 Interrupt Request */
        TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
        TIM_ITConfig(TIM1, TIM_IT_CC2, ENABLE);
        TIM_ITConfig(TIM1, TIM_IT_CC3, ENABLE);
      TIM_ITConfig(TIM1, TIM_IT_CC4, ENABLE);
        /* TIM enable counter */
        TIM_Cmd(TIM1, ENABLE);
}

PS:由于我最近才无意中看到了与非网上派发100块STM32F429探索套件的活动,希望能赶上这趟末班车。由于时间比较紧,所以写得比较匆忙,比较乱。后面不管有没有申请到探索套件 ,我都会积极与大家一起交流、学习。这差不多是我第一次在论坛上发帖,不足之处,请大家多多指出。


 ------------------------------- TNE END~ ~--------------------------------


收藏 1 评论4 发布时间:2014-4-29 14:25

举报

4个回答
Sophor 回答时间:2014-5-13 16:59:55

RE:【STM32F429心得\疑问】使用STM32F103系列单片机后的一些感受

可以拍个视频放上来,更有新意
浩子-2030931 回答时间:2014-5-16 19:40:36

回复:【STM32F429心得\疑问】使用STM32F103系列单片机后的一些感受

恩恩。。后面把GPS等模块的弄好后会发航拍视频的!前期不能做什么特技的动作也没什么意思,网上好多视频的。 
xuth111 回答时间:2014-5-28 09:40:50

RE:【STM32F429心得\疑问】使用STM32F103系列单片机后的一些感受

好帖子,我在在看程序,中间有些地方还没理解透彻
kepco 回答时间:2014-5-29 08:27:00

RE:【STM32F429心得\疑问】使用STM32F103系列单片机后的一些感受

厲害 學習學習

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版