完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
void USART3_IRQHandler(void) //串口3中断服务程序 各位大神向你们请教一下,我想要串口接收两种字符串(一个长,一个短),我知道了帧头的数据,但是没有帧尾,但我知道相应帧的数据,我写好程序在用串口接收的时候 发现好像没有数据,请问各位大神我要怎么解决这个问题! 我是用中断写的 我贴出部分程序: void USART3_Init(u32 bound) void bound) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); /* 配置GPIO的模式和IO口 */ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//TX //串口输出PA9 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOB,&GPIO_InitStructure); /* 初始化串口输入IO */ GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//RX //串口输入PA10 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOAtiNG; //模拟输入 GPIO_Init(GPIOB,&GPIO_InitStructure); /* 初始化GPIO */ //USART1 初始化设置 USART_InitStructure.USART_BaudRate = bound;//波特率设置 USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_Init(USART3, &USART_InitStructure); //初始化串口3 USART_Cmd(USART3, ENABLE); //使能串口3 USART_GetFlagStatus(USART3, USART_FLAG_TC); USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启相关中断 USART_ITConfig(USART3, USART_IT_IDLE, ENABLE);//开启空闲中断 //Usart1 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;//串口3中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//抢占优先级2 NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; //子优先级2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、 } void USART3_IRQHandler(void) void 串口3中断服务程序 void 串口3中断服务程序 void 串口3中断服务程序
{ void 串口3中断服务程序
u8 Res; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断 { Res=USART_ReceiveData(USART3); //(USART3->DR); if(RxCounter<8) { Back1[RxCounter]=Res; if(Back1[0]==0xFC) { RxCounter++; // if(Back1[3]==0x41||Back1[3]==0x4f) // { // RxCounter=0; // } // if(Back1[6]!='n') // { // RxCounter=0; // } } else RxCounter=0; } } if( USART_GetITStatus( USART3, USART_IT_IDLE ) == SET ) //数据帧接收完毕 { flag1=1; //接收完成标志位 Res = USART_ReceiveData( USART3 ); //由软件序列清除中断标志位(先读USART_SR,然后读USART_DR) } } 通过串口助手向串口发送数据时,串口出现了将我之前的数据发送到串口助手的现象
|
|
相关推荐
2个回答
|
|
建议先仿一下
|
|
|
|
去网上找找串口接收的例程吧
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32配合可编程加密芯片SMEC88ST的防抄板加密方案设计
657 浏览 0 评论
2334 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
2137 浏览 3 评论
4767 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2282 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-30 00:10 , Processed in 0.432407 second(s), Total 46, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号