[mw_shl_code=c,true]#include "delay.h"
#include "usart.h"
#include "LED.h"
#include"string.h"
char RecOrder[]; //存储字符
u16 Num=0;
u16 len;
int main(void)
{
delay_init();
LED_Init();
uart_init(9600);
while(1)
{
if(USART_RX_STA & 0x8000)
{
len=USART_RX_STA & 0x3fff;
if(strcmp(RecOrder,"LED0_ON")==0)
{
LED0=0;
Num=0;
USART_RX_STA=0;
}
else if(strcmp(RecOrder,"LED0_OFF")==0)
{
LED0=1;
Num=0;
USART_RX_STA=0;
}
}
}
}[/mw_shl_code]
[mw_shl_code=c,true] 此代码是根据战舰STM32开发板USART源码程序修改的,还没有验证,大家看看有没有问题?
usart.h函数改了中断服务函数,代码如下:
[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]extern u16 Num;
extern char RecOrder[];
void USART1_IRQHandler(void)
{
#ifdef OS_TICKS_PER_SEC
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
RecOrder[Num] =USART_ReceiveData(USART1);//(USART1->DR);
if((USART_RX_STA&0x8000)==0)
{
if(USART_RX_STA&0x4000)
{
if(RecOrder[Num]!=0x0a)USART_RX_STA=0;
else USART_RX_STA|=0x8000;
}
else
{
if(RecOrder[Num]==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=RecOrder[Num];
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;
}
}
}
}
#ifdef OS_TICKS_PER_SEC
OSIntExit();
#endif
} [/mw_shl_code]
大家帮我看看有没有问题,谢谢了!
[/mw_shl_code]
|