[mw_shl_code=c,true]int str_cmp(char*p1,char*p2)//自己写的字符串比较函数
{
while(p1!=NULL && p2 != NULL)
{
while(*p1 == *p2 && *p1 != '\0' && *p2 != '\0')
{
p1++;
p2++;
}
return *p1 - *p2;
}
return 0;
}
int main()
{
u8 t;
u8 len;
u16 times=0;
delay_init();
NVIC_Configuration();
uart_init(9600);
led_init();
while(1)
{
if(USART_RX_STA&0x8000)
{
len=USART_RX_STA&0x3fff;
printf("\r\n您发送的消息为:\r\n\r\n");
for(t=0;t<len;t++)
{
USART_SendData(USART1, USART_RX_BUF[t]);
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
USART_RX_BUF[len]=0;
if(len==9||len==8)
{
if(str_cmp(USART_RX_BUF,"+LED1 ON")==0)led2=0;
if(str_cmp(USART_RX_BUF,"+LED1 OFF")==0)led2=1;
}
USART_RX_STA=0;
}else
{
times++;
if(times%30==0)led1=!led1;
delay_ms(10);
}
}
}[/mw_shl_code]
[mw_shl_code=c,true]
[mw_shl_code=c,true]void uart_init(u32 bound){
//GPIO?????è??
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //????USART1??GPIOA?±??
//USART1_TX PA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //???????ì????
GPIO_Init(GPIOA, &GPIO_InitStructure);
//USART1_RX PA.10
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//????????
GPIO_Init(GPIOA, &GPIO_InitStructure);
//Usart1 NVIC ????
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//??????????3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //×???????3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??????
NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷
//USART ???????è??
USART_InitStructure.USART_BaudRate = bound;//??°??è????9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//×??¤??8??????????
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(USART1, &USART_InitStructure); //???????®??
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//????????
USART_Cmd(USART1, ENABLE); //?????®??
TIM4_Init(99,7199);
USART_RX_STA=0;
TIM4_Set(0);
}
void TIM4_Set(u8 sta)
{
if(sta)
{
TIM_SetCounter(TIM4,0);//?????÷????
TIM_Cmd(TIM4, ENABLE); //????TIMx
}else TIM_Cmd(TIM4, DISABLE);//??±??¨?±?÷4
}
void TIM4_Init(u16 arr,u16 psc)
{
NVIC_InitTypeDef NVIC_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //?±??????//TIM4?±??????
//?¨?±?÷TIM3??????
TIM_TimeBaseStructure.TIM_Period = arr; //?è???????????ü??????×°????????×?????×°???????÷????????
TIM_TimeBaseStructure.TIM_Prescaler =psc; //?è??????×÷??TIMx?±?????????????¤·?????
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //?è???±??·???:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM?ò??????????
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //?ù?????¨????????????TIMx???±???ù??????
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //???????¨??TIM4????,???í?ü??????
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//??????????3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //×???????3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ?¨??????
NVIC_Init(&NVIC_InitStructure); //?ù?????¨????????????VIC?????÷
}
void USART1_IRQHandler(void) //?®??1????·??????ò
{
u8 res;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)//??????????
{
res =USART_ReceiveData(USART1);
if(USART_RX_STA<USART_MAX_RECV_LEN) //??????????????
{
TIM_SetCounter(TIM4,0);//?????÷????
if(USART_RX_STA==0)TIM4_Set(1);
USART_RX_BUF[USART_RX_STA++]=res; //??????????????
}else
{
USART_RX_STA|=1<<15; //????±ê???????ê??
}
}
}
void TIM4_IRQHandler(void)
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)//???ü??????
{
USART_RX_STA|=1<<15; //±ê???????ê??
TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //????TIMx?ü??????±ê??
TIM4_Set(0); //??±?TIM4
}
} [/mw_shl_code]
[/mw_shl_code]