有关STM32 USART中断以及硬件IIC函数问题,求大神解决。

ChinaMaken 2014-06-03 04:16:59
最近在做GPS接收软件,需要通过STM32芯片接收GPS信号,做NEMA0183数据解析,涉及到USART中断问题。请问在中断函数再进行一个中断关闭和开启的作用,会影响到数据的完整性么?会不会出现死机现象?求解疑。
...全文
590 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42130048 2018-05-04
  • 打赏
  • 举报
回复
void USART6_Config(void) { USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIO clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC , ENABLE); /* Enable USART clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); /* Connect USART pins to */ GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6); GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_USART6); /* Configure USART Tx and Rx as alternate function push-pull */ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; //GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; GPIO_Init(GPIOC, &GPIO_InitStructure); /* USARTx configuration ----------------------------------------------------*/ USART_InitStructure.USART_BaudRate = 115200 ; //5250000; 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(USART6, &USART_InitStructure); /* Enable the USARTx Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART6_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); USART_ITConfig(USART6, USART_IT_RXNE, ENABLE); USART_Cmd(USART6, ENABLE); }
  • 打赏
  • 举报
回复
这个主要还是看你的需要,建议不要在中断A中控制中断B,可以使用标志位来进行中断B的控制
ChinaMaken 2014-06-03
  • 打赏
  • 举报
回复
0.5秒的假死还做什么实时性呀,哎
dceacho 2014-06-03
  • 打赏
  • 举报
回复
看标题我还以为你想知道USART中断里关掉I2C中断会不回对I2C通信产生影响. 同一个中断自己关掉自己然后在自己开启,这个没影响的,不过感觉没必要这么做 假设是9600BAND下,400字节大概需要4000位,接近0.5秒的样子,即一有通信就会有接近0.5秒假死
ChinaMaken 2014-06-03
  • 打赏
  • 举报
回复
USART_ITConfig(USART2,USART_IT_RXNE,DISABLE); memset(gps_info, 0, 400 * sizeof(u8)); gps_len=0; while(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断 { //if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET); gps_info[gps_len]=USART_ReceiveData(USART2);//(USART2->DR); //读取接收到的状态数据 gps_len++; } USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); 这是中断函数中的全部代码,你们看下,如何
ChinaMaken 2014-06-03
  • 打赏
  • 举报
回复
为了接收大量的GPS信息。
zhxianbin 2014-06-03
  • 打赏
  • 举报
回复
为什么关中断?

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧