新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32串口中斷方式接收

        STM32串口中斷方式接收

        作者: 時間:2016-11-20 來源:網絡 收藏
        void RCC_Configuration(void)

        {

        本文引用地址:http://www.104case.com/article/201611/318949.htm

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA |
        RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
        }

        首先中斷的配置

        void NVIC_Configuration(void)
        {
        NVIC_InitTypeDef NVIC_InitStructure;

        #ifdefVECT_TAB_RAM

        NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
        #else

        NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
        #endif


        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQChannel;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        }

        接著設置GPIO的第二功能

        void GPIO_Configuration(void)
        {
        GPIO_InitTypeDef GPIO_InitStructure;


        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        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);

        }

        初始化串口

        void USART_Configuration(void)
        {
        USART_InitTypeDef USART_InitStructure;
        USART_ClockInitTypeDefUSART_ClockInitStructure;



        #if 1
        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;

        USART_ClockInit(USART1, &USART_ClockInitStructure);
        #endif
        USART_InitStructure.USART_BaudRate = 115200;
        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;

        USART_Init(USART1, &USART_InitStructure);

        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);


        USART_Cmd(USART1, ENABLE);

        }

        然后是中斷處理函數,這里只實現了簡單的將收到的字符回顯到終端上

        void USART1_IRQHandler(void)
        {
        u16 i;

        if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)
        {
        i = USART_ReceiveData(USART1);
        USART_SendData(USART1,i);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
        {
        }
        }

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

        USART_ClearITPendingBit(USART1, USART_IT_RXNE);

        }

        }



        關鍵詞: STM32串口中斷方

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 罗甸县| 太和县| 丰宁| 平定县| 平安县| 句容市| 昌平区| 安庆市| 华安县| 桂平市| 祥云县| 左贡县| 达州市| 大理市| 大足县| 尼玛县| 米脂县| 灌阳县| 金门县| 突泉县| 墨竹工卡县| 临夏市| 浦北县| 抚松县| 宝坻区| 太白县| 沭阳县| 民勤县| 遂平县| 定襄县| 龙门县| 武清区| 滨州市| 潞西市| 三明市| 汝南县| 韶关市| 蓬安县| 堆龙德庆县| 启东市| 庐江县|