完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
各位大神,我最近在做扫描器读码的程序,主要为我向串口发送一段数据,启动扫描器,扫码器读取条码后,把读取一连串字符串发回串口,我要读取这一连串的字符串。我使用的中断方式读取字符串,下面是我写的程序,能进入中断,但是无法读取数据。大神们帮我解决解决这个问题吧,困扰我好久了!主程序:
int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); delay_init(168); uart_init(9600); while(1) { USART_Cmd(USART3,ENABLE); USART_SendData(USART3, 0x02); delay_ms(10); USART_SendData(USART3, 0x2B); delay_ms(10); USART_SendData(USART3, 0x0D); delay_ms(10); USART_SendData(USART3, 0x0A);//启动扫描器 delay_ms(10); while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET); delay_ms(5000); } 中断程序: void uart_init(u32 bound){ GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); GPIO_PinAFConfig(GPIOB,GPIO_PinSource10,GPIO_AF_USART3); GPIO_PinAFConfig(GPIOB,GPIO_PinSource11,GPIO_AF_USART3); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB,&GPIO_InitStructure); USART_InitStructure.USART_BaudRate = bound; USART_InitStructure.USART_WordLength = USART_WordLength_8b; 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); USART_Cmd(USART3, ENABLE); //USART_ClearFlag(USART1, USART_FLAG_TC); #if EN_USART3_RX USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3; NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); #endif } void USART3_IRQHandler(void) { u32 Res; unsigned char*a; unsigned char i=0; if(USART_GetITStatus(USART3, USART_IT_RXNE)!= RESET) { USART_ClearITPendingBit(USART3,USART_IT_RXNE); Res=USART_ReceiveData(USART3); //(USART1->DR); } a=Res; i++; } |
|
相关推荐
4个回答
|
|
你配置完串口应该加上:USART_ClearFlag(USART3,USART_IT_RXNE);清楚中断标志,然后进中断的判断是:if(USART_GetFlagStatus(USART3,USART_FLAG_RXNE)!=RESET);不是 if(USART_GetITStatus(USART3, USART_IT_RXNE)!= RESET);
最佳答案
|
|
|
|
|
|
|
|
我觉得还是用寄存器的版本比较好,如果有需要话,可以私信我
|
|
|
|
長知識,學習~~~~
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
STM32CUBEMX(13)--SPI,W25Q128外部Flash移植
245 浏览 0 评论
OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏
1413 浏览 1 评论
740 浏览 0 评论
701 浏览 0 评论
STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植
753 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-1 15:17 , Processed in 0.723544 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号