查看: 3035|回复: 3

【三人行】第九篇、主控板程序设计

[复制链接]
  • TA的每日心情
    开心
    2014-4-3 10:09
  • 签到天数: 149 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-9-8 21:31:53 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 jinshaomin 于 2013-9-8 21:34 编辑

    1main程序设计
    主函数主要分为延迟时间初始化、串口接收模块程序、电机初始化三部分。主函数的流程图如图1所示:
    主函数程序代码如下:

    int main(void)

    {   

    delay_init(168);//延迟时间初始化

    uart_init(9600);//串口初始化

    Direction(1);//电机初始化

    delay_ms(10);//延迟10ms

    printf("welcome to control the smart car!:\n\r");//输入语句

    while(1);

    }

    2、串口接收模块程序
    主控板接收到蓝牙从串口传来的数据后存入Res变量,然后通过分支程序来选择执行前进、后退、左转、右转和停止等功能。该模块的程序流程图如图2所示:

    3、修改PWM输出值程序
    该程序是基于“4_PWM的实现”中的程序改编的。代码如下:

    void Change_PWM(int duty1,int duty2,int duty3,intduty4)

    {

             SCB->AIRCR=0x05AF00;//中断优先级分组 抢占:响应=3:1  

    RCC->AHB1ENR|=(1<<2);// 打开GPIOC时钟

    GPIOC->MODER|=0x000AA000;// pc6789第二功能,推挽输出

    GPIOC->OSPEEDR|=0x000FF000;//输出速度为100m

      GPIOC->PUPDR|=0x00055000;//上拉

      

    GPIOC->AFR[0]|=0x22000000;//pc6789的第二功能为AF2

    GPIOC->AFR[1]|=0x00000022;

      

    RCC->APB1ENR|=(1<<1);//打开TIM3时钟

    TIM3->PSC=83;//84M时钟进行84分频,使得计数频率为1M

    TIM3->ARR=10000;//周期为10ms

      TIM3->EGR|=1;//产生一次更新时间

      

    TIM3->CCMR1|=0x6060;//PWM模式1

    TIM3->CCMR2|=0x6060;//PWM模式2

      

    TIM3->CCR1=duty1;//1PWM

    TIM3->CCR2=duty2;//2PWM

    TIM3->CCR3=duty3;//3PWM

    TIM3->CCR4=duty4;//4PWM

      

      TIM3->CCER|=0x1111;//使能比较输出

      

      TIM3->CCMR1|=0x0808;//启动预装载

    TIM3->CCMR2|=0x8080;

      

    TIM3->CR1|=1;//开始计时

    }

    4、设置电机转向程序
    改程序将电机驱动模块的8个输入端口接到了主控板的8GPIO口,通过推挽输出,从而控制电机的转向,代码如下:

    void Direction(int direction)

    {

    SysTick_Config(SystemCoreClock/ 1000); //时钟中断设为1ms

            RCC->AHB1ENR |= 0x00000005; //使能GPIOAGPIOD时钟

      RCC->APB2ENR |= (1<<14); //使能syscfg时钟

             if(direction==0)

             {

      GPIOA->MODER &= 0xffff0000; //设置PA0123为输出

      GPIOA->MODER |= 0x00005555;

      GPIOA->OTYPER &= 0xFFFFff00; //设置PA0123为推挽输出

      GPIOA->OSPEEDR &= 0xffff0000; //设置PA0123的输出速度为100M

      GPIOA->OSPEEDR |= 0x0000ffff;

      SYSCFG->CMPCR = 0x00000001; //使用IO补偿单元

      GPIOA->PUPDR &= 0xffffff00; //设置PA0123无上拉,无下拉

       GPIOA->BSRRH = 0x00ff;  //复位GPIOA_BSRRH寄存器

      GPIOA->BSRRL = 0x0055;           

              }

             else

             {

    GPIOA->MODER &= 0xffff0000; //设置PA0123为输出

      GPIOA->MODER |= 0x0000005555;

      GPIOA->OTYPER &= 0xFFFFff00; //设置PA0123为推挽输出

      GPIOA->OSPEEDR &= 0xffff0000; //设置PA0123的输出速度为100M

      GPIOA->OSPEEDR |= 0x0000ffff;

      SYSCFG->CMPCR = 0x00000001; //使用IO补偿单元

      GPIOA->PUPDR &= 0xffffff00; //设置PA0123无上拉,无下拉

      GPIOA->BSRRH = 0x00ff;  //复位GPIOA_BSRRH寄存器

      GPIOA->BSRRL = 0x00AA;

    }

    }


    图1 主函数流程图

    图1 主函数流程图

    图2 串口接收程序流程图

    图2 串口接收程序流程图
    回复

    使用道具 举报

  • TA的每日心情
    无聊
    2017-12-28 22:36
  • 签到天数: 43 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2013-10-14 17:35:57 | 显示全部楼层
    顶楼主,继续努力!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2013-11-28 12:11:11 | 显示全部楼层
    还没有机会尝试一下 帮顶
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2014-12-12 19:36
  • 签到天数: 45 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2014-1-13 20:14:36 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-2 23:49 , Processed in 0.136436 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.