欢迎来到EDA中国!
当前位置:网站首页 >技术专栏 > 嵌入式

STM32的串口配置(中断方式)

发布时间: 2013-07-03 18:50:40     来源: EDA中国

STM32的串口配置(中断方式)

STM32的串口中断配置,也是很简单的.

    首先是配置UART的GPIO口

    首先是配置UART的GPIO口

    /**********************************************

    * Name : UART1_GPIO_Configuration

    * Deion : Configures the uart1 GPIO ports.

    * Input : None

    * Output : None

    * Return : None

    **********************************************************/

    void UART1_GPIO_Configuration(void)

    {

    GPIO_InitTypeDef GPIO_InitStructure;

    // Configure USART1_Tx as alternate push-pull

    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);

    // Configure USART1_Rx as input floating

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

    GPIO_Init(GPIOA, &GPIO_InitStructure);

    }

    然后是配置串口参数

    /*******************************************************

    * Name : UART1_Configuration

    * Deion : Configures the uart1

    * Input : None

    * Output : None

    * Return : None

    *********************************************/

    void USART_Configuration(void)

    {

    USART_InitTypeDef USART_InitStructure;

    USART_ClockInitTypeDef USART_ClockInitStructure;

    Uart1_GPIO_Configuration();

    USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;

    USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;

    USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;

    USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;

    /* Configure the USART1 synchronous paramters */

    USART_ClockInit(USART1, &USART_ClockInitStructure);

    USART_InitStructure.USART_BaudRate = 9600;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;

    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;

    /* Configure USART1 basic and asynchronous paramters */

    USART_Init(USART1, &USART_InitStructure);

    /* Enable USART1 Receive interrupts */

    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

    /* Enable USART1 */

    USART_Cmd(USART1, ENABLE);

    }

    然后是在中断设置,需要修改stm32f10x_it.c 中的串口中断函数 并且需要修改void NVIC_Configuration(void)函数

    修改NVIC_Configuration函数

    /***********************************************************

    * Name : NVIC_Configuration

    * Deion : Configures NVIC and Vector Table base location.

    * Input : None

    * Output : None

    * Return : None

    ***************************************************/

 void NVIC_Configuration(void)

    {

    NVIC_InitTypeDef NVIC_InitStructure;

    #ifdef VECT_TAB_RAM

    /* Set the Vector Table base location at 0x20000000 */

    NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);

    #else /* VECT_TAB_FLASH */

    /* Set the Vector Table base location at 0x08000000 */

    NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);

    #endif

    /* Configure the NVIC Preemption Priority Bits */

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

    /* Enable the USART1 Interrupt */

    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    }

    //串口中断

    void USART1_IRQHandler(void)

    {

    //处理接收到的数据

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

    {

    /* Clear the USART1 Receive interrupt */

    USART_ClearITPendingBit(USART1, USART_IT_RXNE);

    }

    //发送中断

    if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET)

    {

    USART_SendData(USART1, Send_Data[Send_Length++]);

    if (Send_Length==SEND_LENGTH)

    {

    //发送字节结束

    USART_ClearITPendingBit(USART1,USART_IT_TXE);

    USART_ITConfig(USART1, USART_IT_TXE, DISABLE);

    USART_ITConfig(USART1, USART_IT_TC, ENABLE);

    }

    }

    //发送完成

    if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)

    {

    USART_ClearITPendingBit(USART1,USART_IT_TC);

    USART_ITConfig(USART1, USART_IT_TC, DISABLE);

    }

    }

    在需要发送的程序里Send_Data[SEND_LENGTH]和发送长度设置好,

    void Send_to_PC(void)

    {

    //设置好Send_Data[SEND_LENGTH]数组

    //打开发送中断

    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);

    }

    至此 串口就可以工作起来了!~


关键字 : 中断方式 配置 串口  STM32 
获取帮助