Merge pull request #433 from wangzhouwang/master
[bsp] add uart4 driver for stm32f10x bsp.
This commit is contained in:
commit
4888957d22
@ -35,6 +35,12 @@
|
|||||||
#define UART3_GPIO_RX GPIO_Pin_11
|
#define UART3_GPIO_RX GPIO_Pin_11
|
||||||
#define UART3_GPIO GPIOB
|
#define UART3_GPIO GPIOB
|
||||||
|
|
||||||
|
/* USART4 */
|
||||||
|
#define UART4_GPIO_TX GPIO_Pin_10
|
||||||
|
#define UART4_GPIO_RX GPIO_Pin_11
|
||||||
|
#define UART4_GPIO GPIOC
|
||||||
|
|
||||||
|
|
||||||
/* STM32 uart driver */
|
/* STM32 uart driver */
|
||||||
struct stm32_uart
|
struct stm32_uart
|
||||||
{
|
{
|
||||||
@ -264,6 +270,45 @@ void USART3_IRQHandler(void)
|
|||||||
}
|
}
|
||||||
#endif /* RT_USING_UART3 */
|
#endif /* RT_USING_UART3 */
|
||||||
|
|
||||||
|
#if defined(RT_USING_UART4)
|
||||||
|
/* UART4 device driver structure */
|
||||||
|
struct stm32_uart uart4 =
|
||||||
|
{
|
||||||
|
UART4,
|
||||||
|
UART4_IRQn,
|
||||||
|
};
|
||||||
|
struct rt_serial_device serial4;
|
||||||
|
|
||||||
|
void UART4_IRQHandler(void)
|
||||||
|
{
|
||||||
|
struct stm32_uart* uart;
|
||||||
|
|
||||||
|
uart = &uart4;
|
||||||
|
|
||||||
|
/* enter interrupt */
|
||||||
|
rt_interrupt_enter();
|
||||||
|
if(USART_GetITStatus(uart->uart_device, USART_IT_RXNE) != RESET)
|
||||||
|
{
|
||||||
|
rt_hw_serial_isr(&serial4, RT_SERIAL_EVENT_RX_IND);
|
||||||
|
/* clear interrupt */
|
||||||
|
USART_ClearITPendingBit(uart->uart_device, USART_IT_RXNE);
|
||||||
|
}
|
||||||
|
if (USART_GetITStatus(uart->uart_device, USART_IT_TC) != RESET)
|
||||||
|
{
|
||||||
|
/* clear interrupt */
|
||||||
|
USART_ClearITPendingBit(uart->uart_device, USART_IT_TC);
|
||||||
|
}
|
||||||
|
if (USART_GetFlagStatus(uart->uart_device, USART_FLAG_ORE) == SET)
|
||||||
|
{
|
||||||
|
stm32_getc(&serial4);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* leave interrupt */
|
||||||
|
rt_interrupt_leave();
|
||||||
|
}
|
||||||
|
#endif /* RT_USING_UART3 */
|
||||||
|
|
||||||
|
|
||||||
static void RCC_Configuration(void)
|
static void RCC_Configuration(void)
|
||||||
{
|
{
|
||||||
#if defined(RT_USING_UART1)
|
#if defined(RT_USING_UART1)
|
||||||
@ -286,6 +331,14 @@ static void RCC_Configuration(void)
|
|||||||
/* Enable UART clock */
|
/* Enable UART clock */
|
||||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
||||||
#endif /* RT_USING_UART3 */
|
#endif /* RT_USING_UART3 */
|
||||||
|
|
||||||
|
#if defined(RT_USING_UART4)
|
||||||
|
/* Enable UART GPIO clocks */
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
|
||||||
|
/* Enable UART clock */
|
||||||
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_UART4, ENABLE);
|
||||||
|
#endif /* RT_USING_UART4 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GPIO_Configuration(void)
|
static void GPIO_Configuration(void)
|
||||||
@ -326,6 +379,18 @@ static void GPIO_Configuration(void)
|
|||||||
GPIO_InitStructure.GPIO_Pin = UART3_GPIO_TX;
|
GPIO_InitStructure.GPIO_Pin = UART3_GPIO_TX;
|
||||||
GPIO_Init(UART3_GPIO, &GPIO_InitStructure);
|
GPIO_Init(UART3_GPIO, &GPIO_InitStructure);
|
||||||
#endif /* RT_USING_UART3 */
|
#endif /* RT_USING_UART3 */
|
||||||
|
|
||||||
|
#if defined(RT_USING_UART4)
|
||||||
|
/* Configure USART Rx/tx PIN */
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
|
||||||
|
GPIO_InitStructure.GPIO_Pin = UART4_GPIO_RX;
|
||||||
|
GPIO_Init(UART4_GPIO, &GPIO_InitStructure);
|
||||||
|
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
|
||||||
|
GPIO_InitStructure.GPIO_Pin = UART4_GPIO_TX;
|
||||||
|
GPIO_Init(UART4_GPIO, &GPIO_InitStructure);
|
||||||
|
#endif /* RT_USING_UART4 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NVIC_Configuration(struct stm32_uart* uart)
|
static void NVIC_Configuration(struct stm32_uart* uart)
|
||||||
@ -393,4 +458,21 @@ void rt_hw_usart_init(void)
|
|||||||
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||||
uart);
|
uart);
|
||||||
#endif /* RT_USING_UART3 */
|
#endif /* RT_USING_UART3 */
|
||||||
|
|
||||||
|
#if defined(RT_USING_UART4)
|
||||||
|
uart = &uart4;
|
||||||
|
|
||||||
|
config.baud_rate = BAUD_RATE_115200;
|
||||||
|
|
||||||
|
serial4.ops = &stm32_uart_ops;
|
||||||
|
serial4.config = config;
|
||||||
|
|
||||||
|
NVIC_Configuration(&uart4);
|
||||||
|
|
||||||
|
/* register UART4 device */
|
||||||
|
rt_hw_serial_register(&serial4, "uart4",
|
||||||
|
RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
|
||||||
|
uart);
|
||||||
|
#endif /* RT_USING_UART4 */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user