问题遇到的现象
不停的发送welcome,好像没有办法停止
#include "stm32f4xx.h"
#include "usart.h"
#include "delay.h"
#include "string.h"
#include "stdio.h"
#define MAX 200
u8 RXBUFF[MAX];
u8 RXBUFF[MAX];
vu8 RXCount=0;
vu8 TXCount=0;
vu8 RXHeader=0;
vu8 RXlen=0;
vu8 RXOK=0;
unsigned char a[]="open";
unsigned char b[]="welcome";
u8 USART_RX_BUF[USART_REC_LEN];
u16 USART_RX_STA=0;
void My_USART1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruction;
USART_InitTypeDef USART_Initstruction;
NVIC_InitTypeDef NVIC_InitStruction;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能USART1的时钟
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA的时钟
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);
GPIO_InitStruction.GPIO_Mode=GPIO_Mode_AF; //GPIO设定
GPIO_InitStruction.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruction.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStruction.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruction.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruction);
GPIO_InitStruction.GPIO_Mode=GPIO_Mode_AF; //GPIO设定
GPIO_InitStruction.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruction.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStruction.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruction.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStruction);
USART_Initstruction.USART_BaudRate=9600; //USART串口配置
USART_Initstruction.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_Initstruction.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
USART_Initstruction.USART_Parity=USART_Parity_No;
USART_Initstruction.USART_StopBits=USART_StopBits_1;
USART_Initstruction.USART_WordLength=USART_WordLength_8b;
USART_Init(USART1,&USART_Initstruction);
USART_Cmd(USART1,ENABLE); //使能串口时钟
USART_GetFlagStatus(USART1,USART_FLAG_ORE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //USART1接受到数据就会产生中断
NVIC_InitStruction.NVIC_IRQChannel=USART1_IRQn; //中断配置
NVIC_InitStruction.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruction.NVIC_IRQChannelPreemptionPriority=1;
NVIC_InitStruction.NVIC_IRQChannelSubPriority=1;
NVIC_Init(&NVIC_InitStruction);
}
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
RXBUFF[RXCount]=USART_ReceiveData(USART1);
RXCount++;
if(RXCount>200)
{
RXCount=0;
}
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(RXBUFF[RXCount]!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(RXBUFF[RXCount]==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=RXBUFF[RXCount] ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收
}
}
}
}
}
int main(void)
{
unsigned char cnt=0;
u8 mm;
u8 i,k;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
My_USART1_Init();
while(1)
{
if(RXCount>=4)
{
mm=USART_RX_STA&0X3FFF;
cnt=0;
for(i=0;i<4;i++)
{
if(RXBUFF[i]==a[i])
{
cnt++;
}
}
if(cnt==4)
{
for(k=0;k<7;k++)
{
USART_RX_BUF[k]=b[k];
USART1->DR=USART_RX_BUF[k];
while((USART1->SR&0X40)==0)
}
cnt=0;
}
}
}
}