查看: 5261|回复: 4

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

[复制链接]
  • TA的每日心情
    奋斗
    2016-8-15 09:28
  • 签到天数: 222 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2013-4-22 09:19:24 | 显示全部楼层 |阅读模式
    分享到:
    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);
        }
        至此 串口就可以工作起来了!~

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-28 16:20
  • 签到天数: 980 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2013-4-22 10:50:08 | 显示全部楼层
    {:soso_e100:}                                         
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2019-7-13 19:58
  • 签到天数: 1818 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2013-4-23 08:49:14 | 显示全部楼层
    很好,抽空试一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2022-6-22 23:57
  • 签到天数: 943 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2014-9-19 15:13:29 | 显示全部楼层
    很好    学习啦
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2022-11-21 11:32
  • 签到天数: 409 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-9-19 16:04:56 | 显示全部楼层
    看看,谢谢了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2025-1-12 08:54 , Processed in 0.146456 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.