#include "usart1.h"
int openmv[6];
int16_t TargerNum;
int16_t Find_Task;
int16_t LoR;
int i;
void Usart1_Init(uint32_t Bound)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
USART_InitTypeDef USART_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_Tx | USART_Mode_Rx;
USART_Init(USART1,&USART_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
void Openmv_Data(void)
{
TargerNum=openmv[2];
LoR=openmv[3];
Find_Task =openmv[4];
}
void Openmv_Receive_Data(int16_t data)
{
static u8 state = 0;
if(state==0&&data==0xb3)
{
state=1;
openmv[0]=data;
}
else if(state==1&&data==0xb3)
{
state=2;
openmv[1]=data;
}
else if(state==2)
{
state=3;
openmv[2]=data;
}
else if(state==3)
{
state = 4;
openmv[3]=data;
}
else if(state==4)
{
state = 5;
openmv[4]=data;
}
else if(state==5)
{
if(data == 0x5B)
{
state = 0;
openmv[5]=data;
Openmv_Data();
}
else if(data != 0x5B)
{
state = 0;
for(i=0;i<6;i++)
{
openmv[i]=0x00;
}
}
}
else
{
state = 0;
for(i=0;i<6;i++)
{
openmv[i]=0x00;
}
}
}
void USART_SendByte(USART_TypeDef* USARTx, char str)
{
USART_SendData(USARTx, str);//·¢Ë͵¥¸ö×Ö·û
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);//ÅжÏÊÇ·ñ·¢ËÍÍê³É
}
void USART1_IRQHandler(void)
{
u8 com_data;
#if SYSTEM_SUPPORT_OS
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearFlag(USART1,USART_FLAG_RXNE);
com_data = USART1->DR;
Openmv_Receive_Data(com_data);
Openmv_Data();
}
#if SYSTEM_SUPPORT_OS
OSIntExit();
#endif
}
openmv和stm32的通信协议
最新推荐文章于 2024-09-22 13:09:13 发布