【记录】STM32在ucOS中的串口操作(Interrrupt)

来源:互联网 发布:徐老师的淘宝店怎么进 编辑:程序博客网 时间:2024/05/24 06:31

1、串口初始化

static  void  BSP_USART_Init (void) {     //GPIO端口设置    GPIO_InitTypeDef GPIO_InitStructure;    USART_InitTypeDef USART_InitStructure;    //NVIC_InitTypeDef NVIC_InitStructure;    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟    USART_DeInit(USART1);  //复位串口1     //USART1_TX   PA.9    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA9    //USART1_RX   PA.10    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入    GPIO_Init(GPIOA, &GPIO_InitStructure);  //初始化PA10   //USART 初始化设置    USART_InitStructure.USART_BaudRate = 9600;//一般设置为9600;    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式    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);    BSP_IntVectSet(BSP_INT_ID_USART1, BSP_IntHandlerUSART1); //设置串口1的中断向量    BSP_IntEn(BSP_INT_ID_USART1);    USART_Cmd(USART1, ENABLE);                //使能串口}

2、编写串口接收数据中断处理函数

static void BSP_IntHandlerUSART1 (void){       if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)    //进中断的标志      {                                                                                                           USART_ClearITPendingBit(USART1,USART_IT_RXNE);        USART_SendData(USART1, USART_ReceiveData(USART1));      //接收到的数据重新发送到串口                                    //OSMboxPost(MSGBOX,&rec_len);      }  }
0 0
原创粉丝点击