完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
求助,FREERTOS下USART3中断工作2小时左右死机,目前是测试程序,就中断接收1个数据,马上发送,请大家帮我看一下串口配置部分是否有问题?
void UART3_Configuration(void) { //GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; //使能串口3,PB,AFIO总线 // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口时钟配置 USART_DeInit(USART3); //复位串口3 // RS485_CTL3_L(); //RECEIVE /* B10 USART3_Tx */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出-TX GPIO_Init(GPIOB, &GPIO_InitStructure); /* B11 USART3_Rx */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入-RX GPIO_Init(GPIOB, &GPIO_InitStructure); RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3,ENABLE);//复位串口 3 RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3,DISABLE);//停止复位 USART_InitStructure.USART_BaudRate = 38400; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART3, &USART_InitStructure); //初始化串口 //Usart3 NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//IRQ通道使能 NVIC_Init(&NVIC_InitStructure);//根据指定的参数初始化VIC寄存器 //串口3使用接收中断 USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); //USART_ITConfig(USART3, USART_IT_TC, ENABLE); USART_ClearITPendingBit(USART3, USART_IT_TC); /* Enable the USARTx */ USART_Cmd(USART3, ENABLE); } void USART3_IRQHandler(void) { u8 uart3_data; taskENTER_CRITICAL(); if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) { uart3_data =USART_ReceiveData(USART3);//读取接收到的数据 } taskEXIT_CRITICAL(); } void USART3_SendChar(u8 ch) { u16 i = 0; USART_SendData(USART3, ch); while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET && i < 3000) } |
|
相关推荐
1个回答
|
|
应该在你数据处理的地方,这两个代码,如果有问题,就不是两小时后死机了,是立即就体现的。
|
|
|
|
只有小组成员才能发言,加入小组>>
818 浏览 0 评论
1162 浏览 1 评论
2536 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2720 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1114浏览 3评论
198浏览 2评论
465浏览 2评论
382浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
462浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 06:45 , Processed in 1.029105 second(s), Total 50, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号