最近在做一个stm32f103rct6的蓝牙遥控小车,但是蓝牙部分出了问题
主程序是这个- include "stm32f10x.h"
- #include "pwm.h"
- #include "gpio.h"
- #include "delay.h"
- #include "system.h"
- #include "motor.h"
- #include "usart1.h"
- #include "usart3.h"
- //GPIO_SetBits(GPIOC,GPIO_Pin_4); //PC.4 输出高
- #define KEY1 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)
- #define KEY2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)
- int res=0x61;
- void USART3_Init(void);
- void GPIOdianji_Init(void);
- void TIM2_PWM_Init(u16 arr,u16 psc);
- int main(void)
- {
- KEY_Init();
- GPIOdianji_Init();
- // USART1_Init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断函数 设置响应优先级为2
- delay_init(10);
-
-
-
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断函数 设置响应优先级为2
- USART3_Init();
-
- TIM2_PWM_Init(1999,719);
-
- while(1)
- {
- // car_speed();
- // if(res==0x31)
- // {
- // forward();
- // car_speed();
- // }
- //
- // if(res==0x32)
- // {
- // back();
- // car_speed();
- // }
- //
- // if(res==0x33)
- // {
- // left();
- // car_speed();
- // }
- //
- // if(res==0x34)
- // {
- // right();
- // car_speed();
- // }
- //
- // if(res==0x61)
- // {
- // stop();
- // car_speed();
- // }
- if(KEY1==0)
- {
- right();
- car_speed();
- }
- if(KEY2==0)
- {
- stop();
- }
- if(KEY1==1)
- {
- stop();
- }
-
- }
- }
复制代码 KEY1和KEY2是测试小车能不能转动用的,使用的是l298n上的6个引脚,IN1234负责电机转动方向和停止,ENA和ENB负责调整转速,蓝牙使用的是串口3,carspeed函数就是控制转速,里面是四个轮子对应的四个通道:
void car_speed(void)
{
TIM_SetCompare1(TIM2,1200);
TIM_SetCompare2(TIM2,1200);
TIM_SetCompare3(TIM2,750);
TIM_SetCompare4(TIM2,750);
}
forward,back,left,right和stop是控制IN1234
- #include "usart3.h"
- #include "stm32f10x.h"
- #include "motor.h"
- #include "pwm.h"
- #include "delay.h"
- void USART3_Init(void)
- {
- USART_InitTypeDef USART_InitStrue;
- NVIC_InitTypeDef NVIC_InitStrue;
- GPIO_InitTypeDef GPIO_InitStructure;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//串口端口使能
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB.10 TX接蓝牙RX
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
- GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PA9
-
- //USART1_RX PA.10
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //RX 接蓝牙TX
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
- GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB11
-
- USART_InitStrue.USART_BaudRate=9600;
- USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
- USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
- USART_InitStrue.USART_Parity=USART_Parity_No;
- USART_InitStrue.USART_StopBits=USART_StopBits_1;
- USART_InitStrue.USART_WordLength=USART_WordLength_8b;
- USART_Init(USART3,&USART_InitStrue);
-
- USART_Cmd(USART3,ENABLE);//使能串口1
-
- USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//开启接收中断
-
- NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
- NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
- NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
- NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
- NVIC_Init(&NVIC_InitStrue);
- }
- extern int res;
- void USART3_IRQHandler(void) // 串口3中断服务函数
- {
-
- if(USART_GetITStatus(USART3,USART_IT_RXNE)==SET) // 中断标志
- {
- res= USART_ReceiveData(USART3); // 串口2 接收
- switch(res)
- {
- case 0x61:delay_ms(50);car_speed();stop(); break;
- case 0x31:delay_ms(50);car_speed();forward();break;
- case 0x32:delay_ms(50);car_speed();back(); break;
- case 0x33:delay_ms(50);car_speed();left(); break;
- case 0x34:delay_ms(50);car_speed();right(); break;
- }
- }
- USART_SendData(USART3,res); // 串口2 发送
- // USART_ClearITPendingBit(USART3,USART_ReceiveData(USART3));
- USART_ClearFlag(USART3,USART_FLAG_TC);
- }
复制代码
这个是串口3的配置,手机可以成功连接蓝牙,但是输入输出东西用串口调试助手就没有反应。
程序没有错误没有警告。
求大神指点。
谢谢!
|