完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
STM32串口USART2(接蓝牙)不能接收手机端发送的字符,求解决,感激不尽! 急急急急急急!谢谢 此函数能够通过STM32发送字符串给串口(蓝牙HC06),然后发送给手机端,但是手机端发送字符串给STM32,STM32不能接收解析,求解决方案 usart函数: void uart_init(u32 br_num) { USART_InitTypeDef USART_InitStructure; // USART_ClockInitTypeDef USART_ClockInitStruct; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //¿ªÆôUSART1ʱÖÓ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //ÅäÖÃPA2×÷ΪUSART1¡¡Tx GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA , &GPIO_InitStructure); //ÅäÖÃPA3×÷ΪUSART1¡¡Rx GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAtiNG; GPIO_Init(GPIOA , &GPIO_InitStructure); //Usart2 NVIC NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0 ;//************// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //0-3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //ÅäÖÃUSART2 //Öжϱ»ÆÁ±ÎÁË USART_InitStructure.USART_BaudRate = br_num;//br_num; //²¨ÌØÂÊ¿ÉÒÔͨ¹ýµØÃæÕ¾ÅäÖà USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8λÊý¾Ý USART_InitStructure.USART_StopBits = USART_StopBits_1; //ÔÚÖ¡½áβ´«Êä1¸öֹͣλ USART_InitStructure.USART_Parity = USART_Parity_No; //½ûÓÃÆæżУÑé USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //Ó²¼þÁ÷¿ØÖÆʧÄÜ USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //·¢ËÍ¡¢½ÓÊÕʹÄÜ // //ÅäÖÃUSART1ʱÖÓ // USART_ClockInitStruct.USART_Clock = USART_Clock_Disable; //ʱÖӵ͵çƽ»î¶¯ // USART_ClockInitStruct.USART_CPOL = USART_CPOL_Low; //SLCKÒý½ÅÉÏʱÖÓÊä³öµÄ¼«ÐÔ->µÍµçƽ // USART_ClockInitStruct.USART_CPHA = USART_CPHA_2Edge; //ʱÖÓµÚ¶þ¸ö±ßÑؽøÐÐÊý¾Ý²¶»ñ // USART_ClockInitStruct.USART_LastBit = USART_LastBit_Disable; //×îºóһλÊý¾ÝµÄʱÖÓÂö³å²»´ÓSCLKÊä³ö USART_Init(USART2, &USART_InitStructure); // USART_ClockInit(USART2, &USART_ClockInitStruct); //ʹÄÜUSART1½ÓÊÕÖÐ¶Ï USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //ʹÄÜUSART1 USART_Cmd(USART2, ENABLE); } u8 TxBuffer[256]; u8 TxCounter=0; u8 count=0; u8 RxBuffer[16]={0}; static u8 RxState = 0; void Uart2_IRQ(void) { if (USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET)//??!????if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)??? { USART_ReceiveData(USART2); } //·¢ËÍÖÐ¶Ï if((USART2->SR & (1<<7))&&(USART2->CR1 & USART_CR1_TXEIE))//if(USART_GetITStatus(USART1,USART_IT_TXE)!=RESET) { USART2->DR = TxBuffer[TxCounter++]; //дDRÇå³ýÖжϱêÖ¾ if(TxCounter == count) { USART2->CR1 &= ~USART_CR1_TXEIE; //¹Ø±ÕTXEÖÐ¶Ï //USART_ITConfig(USART1,USART_IT_TXE,DISABLE); } } //½ÓÊÕÖÐ¶Ï (½ÓÊռĴæÆ÷·Ç¿Õ) if(USART2->SR & (1<<5))//if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { u8 com_data = USART2->DR; static u8 _data_len = 0,_data_cnt = 0; if(RxState==0)//if(RxState==0&&com_data==0xAA) { RxState=1; RxBuffer[0]=com_data; } else if(RxState==1)//if(RxState==1&&com_data==0xAF) { RxState=0; RxBuffer[1]=com_data; } } } 主函数中循环: while(1) { if(RxBuffer[0] == 'c' | RxBuffer[1] == 'c' )//0x64 'c' && stateXoled == 0 { printf("$%d*",RxBuffer[0]); BELL=1; delay_ms(500); BELL=0; stateXoled = 0; FAN=1; OLED_Display_Off(); } if(RxBuffer[0] == 'o' | RxBuffer[1] == 'o')//0x6f 'o' && stateXoled == 1 { // printf("$%d?",RxBuffer[0]); stateXoled = 1; FAN=0;/*´ò¿ªPM2.5*/ OLED_Display_On(); } if(RxBuffer[0] == 0x73 ) //'s' { readFile();/*·¢ËÍÊý¾Ý */ } // printf("$%d$",RxBuffer[0]); RxBuffer[0] = 0x00; //»º´æÇå¿Õ } 上述程序曾置于定时器中断中,也不能行!程序有3个定时器中断(先占优先级:0, 从占:1 2 3),一个串口中断(先占:0,从占:0) 求大神指点!!!!!!!!!!!!!! |
|
相关推荐
1个回答
|
|
说下个人看法,代码中的2个疑点,楼主不妨检查一下
1、不知道使用的具体型号,管脚情况如何,使用的是PA2、PA3,又打开了AFIO时钟,如果使用重映射功能,那么应该在PA6和PA7才对,那么原理图上究竟是那一个管脚连接到蓝牙模块呢?这可能是主要原因。 2、中断优先级0,0,推荐使用其他的优先级,这一个不知道行不行,这只是可能,并不是绝对。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
238 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
734 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1128 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1600 浏览 1 评论
538 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-9 12:36 , Processed in 0.544133 second(s), Total 74, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号