最近在做一個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的配置,手機可以成功連接藍牙,但是輸入輸出東西用串口調試助手就沒有反應。
程序沒有錯誤沒有警告。
求大神指點。
謝謝!
|