/* 配置串口1引脚 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP
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)
2.下面的代陵指码设置并使能串口1中断,这个应该放在有一个函数尺渗配中,然后再main中启用该函数
/* Enable the USART1 Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE
NVIC_Init(&NVIC_InitStructure)
3.写一个串口1的中断ISR
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)==SET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE)
get_data=USART_ReceiveData(USART1)
//这里可以定义一个buffer缓冲,全局的。
}
if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
{
USART_ClearFlag(USART1,USART_FLAG_ORE)
USART_ReceiveData(USART1)
}
}
void USART3_IRQHandler(void){
u8 res
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//½ÓÊÕµ½Êý¾Ý
{
res =USART_ReceiveData(USART3)
if((USART3_RX_STA&(1<谈拿<15))==0)//½ÓÊÕÍêµÄÒ»ÅúÊý¾Ý,»¹Ã»Óб»´¦Àí,Ôò²»ÔÙ½ÓÊÕÆäËûÊý¾Ý
{
if(USART3_RX_STA<USART3_MAX_RECV_LEN) //»¹¿ÉÒÔ½ÓÊÕÊý¾Ý
{
TIM_SetCounter(TIM7,0)//¼ÆÊýÆ÷Çå¿Õ //¼ÆÊý磨侍橘Æ÷Çå¿Õ
if(USART3_RX_STA==0) /瞎团/ʹÄܶ¨Ê±Æ÷7µÄÖжÏ
{
TIM_Cmd(TIM7,ENABLE)//ʹÄܶ¨Ê±Æ÷7
}
USART3_RX_BUF[USART3_RX_STA++]=res //¼Ç¼½ÓÊÕµ½µÄÖµ
}else
{
USART3_RX_STA|=1<<15 //Ç¿ÖƱê¼Ç½ÓÊÕÍê³É
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)