📄 probe_rs232c.c
字号:
/* 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 + -