stm32如何启动串口中断

stm32如何启动串口中断,第1张

1.首先配置串喊汪口1管脚

/* 配置串口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 //Ç¿ÖƱê¼Ç½ÓÊÕÍê³É

}

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8189896.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存