当前位置:网站首页>Serial port receives a packet of data
Serial port receives a packet of data
2022-07-08 00:56:00 【Zelonal】
With single chip microcomputer N32G435 For example , Serial communication is GPS, Cooperation timer 2 Receive a packet of data .
By continuously updating the timer in the serial port receiving interrupt 2 The count of , Until the timer 2 Interrupt overflow ( General timing 10ms), Indicates that a packet of data has been received .
In the course of debugging , It is found that the receive interrupt has only entered once , A string received only one character , After online inquiry, several solutions have been obtained , as follows :
- The interrupt program takes too long , As a result, subsequent data cannot be received when it arrives .
- Interrupt clear flag bit .
- Serial port interrupt priority is too low , Cause interrupt nesting . Set the priority to the highest .
Interrupt clearing has been added to my interrupt function , It also improves interrupt priority , But it didn't solve , Later, it was found that... In the receiving function would be interrupted printf(); Function delete , Found to return to normal , Should be printf(); The function takes too long to receive the following data !!
Next, I will make a note of the configuration process and processing :
// Timer 2 Initialize configuration
void TIM2_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitType TIM_TimeBaseInitStructure;
NVIC_InitType NVIC_InitStructure;
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM2,ENABLE); /// Can make TIM2 The clock
TIM_TimeBaseInitStructure.Period = arr; // Automatic reload load value
TIM_TimeBaseInitStructure.Prescaler=psc; // Timer frequency division
TIM_TimeBaseInitStructure.CntMode=TIM_CNT_MODE_UP; // Upcount mode
TIM_TimeBaseInitStructure.ClkDiv=TIM_CLK_DIV1;
TIM_InitTimeBase(TIM2,&TIM_TimeBaseInitStructure);// initialization TIM2
TIM_ConfigInt(TIM2,TIM_INT_UPDATE,ENABLE); // Allow timer 3 Update interrupt
TIM_Enable(TIM2,DISABLE); // First disable timer 3
NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn; // Timer 3 interrupt
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; // preemption 1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; // Sub priority 3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ClrIntPendingBit(TIM2,TIM_INT_UPDATE); // Clears the interrupt flag bit
}
// Timer 2 Interrupt function processing
void TIM2_IRQHandler(void)
{
if(TIM_GetIntStatus(TIM2,TIM_INT_UPDATE)==SET) // Overflow interrupt
{
Uart3DataNeedProcessFlag=1;// Need to process current data
TIM_Enable(TIM2,DISABLE);// Stop timer
TIM_ClrIntPendingBit(TIM2,TIM_INT_UPDATE); // Clears the interrupt flag bit
}
}
//GPS-UART To configure
void Uart3Init (void)
{
GPIO_InitType GPIO_InitStructure;
USART_InitType USART_InitStructure;
NVIC_InitType NVIC_InitStructure;
// Turn on the clock
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB,ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_UART5,ENABLE);
//GPIO Mouth configuration
GPIO_InitStructure.Pin = GPIO_PIN_8 ; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF6_UART5;
GPIO_InitPeripheral(GPIOB,&GPIO_InitStructure); //
GPIO_InitStructure.Pin = GPIO_PIN_9;
GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF6_UART5;
GPIO_InitPeripheral(GPIOB,&GPIO_InitStructure); //
//UART To configure
USART_InitStructure.BaudRate = 9600;// Serial port baud rate
USART_InitStructure.WordLength = USART_WL_8B;// The word is 8 Bit data format
USART_InitStructure.StopBits = USART_STPB_1;// A stop bit
USART_InitStructure.Parity = USART_PE_NO;// No parity bit
USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;// No hardware data flow control
USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX; // Transceiver mode
USART_Init(UART5, &USART_InitStructure); //
// Interrupt configuration
NVIC_InitStructure.NVIC_IRQChannel = UART5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2 ; // preemption 2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; // Sub priority 2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ Channel enable
NVIC_Init(&NVIC_InitStructure); // Initialize... According to the specified parameters VIC register
USART_ConfigInt(UART5, USART_INT_RXDNE, ENABLE);
USART_Enable(UART5, ENABLE);
}
// Interrupt function processing , You need to put this function into the corresponding interrupt function
void GPS_IRQHandler(void)
{
volatile u8 Res;
if(USART_GetIntStatus(UART5,USART_INT_RXDNE)!=RESET)
{
Res=USART_ReceiveData(UART5);
if(Uart3DataNeedProcessFlag==0)
{
if(Uart3ReceiveDataNum<=UART3_RECEIVE_MAX_NUM)
{
Uart3ReceiveData[Uart3ReceiveDataNum++] = Res;
TIM_ClrIntPendingBit(TIM2,TIM_INT_UPDATE);// Clear timer overflow interrupt
TIM_Enable(TIM2,ENABLE);// Start timing
TIM_SetCnt(TIM2,0);// Reset timer
}
else
{
Uart3ReceiveDataNum=0;
Uart3DataNeedProcessFlag=1;
}
}
}
}
边栏推荐
- What is load balancing? How does DNS achieve load balancing?
- STL--String类的常用功能复写
- v-for遍历元素样式失效
- 英雄联盟胜负预测--简易肯德基上校
- Cve-2022-28346: Django SQL injection vulnerability
- 第一讲:链表中环的入口结点
- Reentrantlock fair lock source code Chapter 0
- 新库上线 | CnOpenData中国星级酒店数据
- Course of causality, taught by Jonas Peters, University of Copenhagen
- My best game based on wechat applet development
猜你喜欢
Service Mesh介绍,Istio概述
Deep dive kotlin synergy (XXII): flow treatment
基于人脸识别实现课堂抬头率检测
C # generics and performance comparison
Qt添加资源文件,为QAction添加图标,建立信号槽函数并实现
FOFA-攻防挑战记录
Redis, do you understand the list
[necessary for R & D personnel] how to make your own dataset and display it.
Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
51 communicates with the Bluetooth module, and 51 drives the Bluetooth app to light up
随机推荐
第一讲:链表中环的入口结点
Deep dive kotlin collaboration (the end of 23): sharedflow and stateflow
Cve-2022-28346: Django SQL injection vulnerability
Interface test advanced interface script use - apipost (pre / post execution script)
串口接收一包数据
13. Enregistrement et chargement des modèles
Application practice | the efficiency of the data warehouse system has been comprehensively improved! Data warehouse construction based on Apache Doris in Tongcheng digital Department
NVIDIA Jetson test installation yolox process record
A network composed of three convolution layers completes the image classification task of cifar10 data set
Cascade-LSTM: A Tree-Structured Neural Classifier for Detecting Misinformation Cascades(KDD20)
Introduction to ML regression analysis of AI zhetianchuan
国外众测之密码找回漏洞
3 years of experience, can't you get 20K for the interview and test post? Such a hole?
Qt添加资源文件,为QAction添加图标,建立信号槽函数并实现
What if the testing process is not perfect and the development is not active?
12.RNN应用于手写数字识别
5G NR 系统消息
【obs】Impossible to find entrance point CreateDirect3D11DeviceFromDXGIDevice
tourist的NTT模板
《因果性Causality》教程,哥本哈根大学Jonas Peters讲授