基于stm32f4的蓝牙控制小车

内容发布更新时间 : 2024/11/7 14:34:22星期一 下面是文章的全部内容请认真阅读。

图4.1 主函数流程图

主函数程序代码如下: int main(void) {

delay_init(168);//延迟时间初始化 uart_init(9600);//串口初始化 Direction(1);//电机初始化 delay_ms(10);//延迟10ms

printf(\输入语句 while(1); }

4.1.2 串口接收模块程序

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

图2 串口接收程序流程图

4.1.3 修改PWM输出值程序

该程序是基于“4_PWM的实现”中的程序改编的。代码如下: void Change_PWM(int duty1,int duty2,int duty3,int duty4) {

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;//1路PWM TIM3->CCR2=duty2;//2路PWM TIM3->CCR3=duty3;//3路PWM

TIM3->CCR4=duty4;//4路PWM

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

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

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

4.1.4 设置电机转向程序

改程序将电机驱动模块的8个输入端口接到了主控板的8个GPIO口,通过推挽输出,从而控制电机的转向,代码如下: void Direction(int direction) {

SysTick_Config(SystemCoreClock / 1000); //时钟中断设为1ms RCC->AHB1ENR |= 0x00000005; //使能GPIOA和GPIOD时钟 RCC->APB2ENR |= (1<<14); //使能syscfg时钟

if(direction==0) {

GPIOA->MODER &= 0xffff0000; //设置PA0,1,2,3为输出 GPIOA->MODER |= 0x00005555;

GPIOA->OTYPER &= 0xFFFFff00; //设置PA0,1,2,3为推挽输出

GPIOA->OSPEEDR &= 0xffff0000; //设置PA0,1,2,3的输出速度为100M GPIOA->OSPEEDR |= 0x0000ffff;

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

GPIOA->PUPDR &= 0xffffff00; //设置PA0,1,2,3无上拉,无下拉 GPIOA->BSRRH = 0x00ff; //复位GPIOA_BSRRH寄存器 GPIOA->BSRRL = 0x0055; } else {

GPIOA->MODER &= 0xffff0000; //设置PA0,1,2,3为输出 GPIOA->MODER |= 0x0000005555;

GPIOA->OTYPER &= 0xFFFFff00; //设置PA0,1,2,3为推挽输出

GPIOA->OSPEEDR &= 0xffff0000; //设置PA0,1,2,3的输出速度为100M GPIOA->OSPEEDR |= 0x0000ffff;

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

GPIOA->PUPDR &= 0xffffff00; //设置PA0,1,2,3无上拉,无下拉 GPIOA->BSRRH = 0x00ff; //复位GPIOA_BSRRH寄存器 GPIOA->BSRRL = 0x00AA; } }

4.2 android客户端程序设计 4.2.1 控制界面的布局

控制界面主要运用了线性布局、相对布局和表格布局。整体采用线性布局,局部采用相对布局,而控制按钮采用了表格布局。控制界面的布局如图4.1所示:

图4.1 控制界面的布局

4.2.2 布局的代码如下:

android:id = \ android:orientation=\ android:layout_width=\ android:layout_height=\ >

android:layout_width=\ android:layout_height=\ android:id= \

android:layout_alignParentBottom = \>

android:layout_width=\

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi