⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 probe_rs232c.c

📁 ST32F10xxx+uCOSII2.85的官方源代码,带LCD驱动,支持Keil3和IAR环境.这个可以做为参考,实际使用需要修改,他做的太复杂了,目录也很深
💻 C
📖 第 1 页 / 共 2 页
字号:
                                                                /* Configure GPIOC.11 as input floating                     */
    gpio_init.GPIO_Pin   = GPIO_Pin_11;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOC, &gpio_init);

#elif (PROBE_RS232_UART_3_REMAP_FULL > 0)

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_AFIO, ENABLE);
    GPIO_PinRemapConfig(GPIO_FullRemap_USART3, ENABLE);

                                                                /* Configure GPIOD.8 as push-pull                           */
    gpio_init.GPIO_Pin   = GPIO_Pin_8;
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOD, &gpio_init);

                                                                /* Configure GPIOD.9 as input floating                      */
    gpio_init.GPIO_Pin   = GPIO_Pin_9;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOD, &gpio_init);

#else

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

                                                                /* Configure GPIOB.10 as push-pull                          */
    gpio_init.GPIO_Pin   = GPIO_Pin_10;
    gpio_init.GPIO_Speed = GPIO_Speed_50MHz;
    gpio_init.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOB, &gpio_init);

                                                                /* Configure GPIOB.11 as input floating                     */
    gpio_init.GPIO_Pin   = GPIO_Pin_11;
    gpio_init.GPIO_Mode  = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOB, &gpio_init);
#endif



                                                                /* -------------------- SETUP USART3 ---------------------- */
    usart_init.USART_BaudRate            = baud_rate;
    usart_init.USART_WordLength          = USART_WordLength_8b;
    usart_init.USART_StopBits            = USART_StopBits_1;
    usart_init.USART_Parity              = USART_Parity_No ;
    usart_init.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    usart_init.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
    usart_init.USART_Clock               = USART_Clock_Disable;
    usart_init.USART_CPOL                = USART_CPOL_Low;
    usart_init.USART_CPHA                = USART_CPHA_2Edge;
    usart_init.USART_LastBit             = USART_LastBit_Disable;

    USART_Init(USART3, &usart_init);
    USART_Cmd(USART3, ENABLE);

    nvic_init.NVIC_IRQChannel                   = USART3_IRQChannel;
    nvic_init.NVIC_IRQChannelPreemptionPriority = 0;
    nvic_init.NVIC_IRQChannelSubPriority        = 0;
    nvic_init.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Init(&nvic_init);
#endif
}

/*
*********************************************************************************************************
*                                 Rx and Tx Communication Handler
*
* Description: This function handles both Rx and Tx interrupts.
*
* Argument(s): None
*
* Returns    : None
*
* Note(s)    : (1) This ISR handler handles the interrupt entrance/exit as expected by
*                  by uC/OS-II v2.85.  If you are using a different RTOS (or no RTOS), then this
*                  procedure may need to be modified or eliminated.  However, the logic in the handler
*                  need not be changed.
*********************************************************************************************************
*/

void  ProbeRS232_RxTxISRHandler (void)
{
    CPU_INT08U  rx_data;
    CPU_SR      cpu_sr;


    CPU_CRITICAL_ENTER();                                       /* Tell uC/OS-II that we are starting an ISR                */
    OSIntNesting++;
    CPU_CRITICAL_EXIT();


#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_1)
    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) {

        rx_data = USART_ReceiveData(USART1) & 0xFF;             /* Read one byte from the receive data register             */
        ProbeRS232_RxHandler(rx_data);

        USART_ClearITPendingBit(USART1, USART_IT_RXNE);         /* Clear the USART1 Receive interrupt                       */
    }

    if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) {
        ProbeRS232_TxHandler();

        USART_ClearITPendingBit(USART1, USART_IT_TXE);          /* Clear the USART1 transmit interrupt                      */
    }
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_2)
    if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) {

        rx_data = USART_ReceiveData(USART2) & 0xFF;             /* Read one byte from the receive data register             */
        ProbeRS232_RxHandler(rx_data);

        USART_ClearITPendingBit(USART2, USART_IT_RXNE);         /* Clear the USART1 Receive interrupt                       */
    }

    if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET) {
        ProbeRS232_TxHandler();

        USART_ClearITPendingBit(USART2, USART_IT_TXE);          /* Clear the USART1 transmit interrupt                      */
    }
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_3)
    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) {

        rx_data = USART_ReceiveData(USART3) & 0xFF;             /* Read one byte from the receive data register             */
        ProbeRS232_RxHandler(rx_data);

        USART_ClearITPendingBit(USART3, USART_IT_RXNE);         /* Clear the USART1 Receive interrupt                       */
    }

    if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET) {
        ProbeRS232_TxHandler();

        USART_ClearITPendingBit(USART3, USART_IT_TXE);          /* Clear the USART1 transmit interrupt                      */
    }
#endif

    OSIntExit();                                                /* Tell uC/OS-II that we are leaving the ISR                */
}

/*
*********************************************************************************************************
*                                 Rx and Tx Communication Handler
*
* Description: These functions handle the Rx and Tx interrupts.
*
* Argument(s): None
*
* Returns    : None
*
* Note(s)    : These functions are empty because Rx and Tx interrupts are both handled by ProbeRS232_RxTxISRHandler()
*********************************************************************************************************
*/

void  ProbeRS232_RxISRHandler (void)
{
}

void  ProbeRS232_TxISRHandler (void)
{
}

/*
*********************************************************************************************************
*                                      Transmit One Byte
*
* Description: This function transmits one byte.
*
* Argument(s): c    is the byte to transmit.
*
* Returns    : None
*********************************************************************************************************
*/

void  ProbeRS232_Tx1 (CPU_INT08U c)
{
#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_1)
    USART_SendData(USART1, c);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_2)
    USART_SendData(USART2, c);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_3)
    USART_SendData(USART3, c);
#endif
}

/*
*********************************************************************************************************
*                                      Enable/disable Tx Interrupts
*
* Description: Enables or disables Tx interrupts.
*
* Argument(s): None
*
* Returns    : None
*********************************************************************************************************
*/

void  ProbeRS232_TxIntDis (void)
{
#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_1)
    USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_2)
    USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_3)
    USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
#endif
}

void  ProbeRS232_TxIntEn (void)
{
#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_1)
    USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_2)
    USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_3)
    USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
#endif
}

/*
*********************************************************************************************************
*                                      Enable/disable Rx Interrupts
*
* Description: Enables or disables Rx interrupts.
*
* Argument(s): None
*
* Returns    : None
*********************************************************************************************************
*/

void  ProbeRS232_RxIntDis (void)
{
#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_1)
    USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_2)
    USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_3)
    USART_ITConfig(USART3, USART_IT_RXNE, DISABLE);
#endif
}

void  ProbeRS232_RxIntEn (void)
{
#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_1)
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_2)
    USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);
#endif

#if (PROBE_RS232_COMM_SEL == PROBE_RS232_UART_3)
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
#endif
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -