| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- #include "hal/hal.h"
- #include "stm32f3xx_ll_usart.h"
- #include "uart2.h"
- static UART_HandleTypeDef huart2;
- static void UART2_Pin_Init(void){
- GPIO_InitTypeDef GPIO_InitStruct = {0};
- /* Peripheral clock enable */
- __HAL_RCC_USART2_CLK_ENABLE();
-
- __HAL_RCC_GPIOA_CLK_ENABLE();
- /**USART2 GPIO Configuration
- PA2 ------> USART2_TX
- PA3 ------> USART2_RX
- */
- GPIO_InitStruct.Pin = UART_TX_Pin|UART_RX_Pin;
- GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
- GPIO_InitStruct.Pull = GPIO_NOPULL;
- GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
- GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
- HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
- }
- void UART2_Init(void){
- huart2.Instance = USART2;
- huart2.Init.BaudRate = 500000;
- huart2.Init.WordLength = UART_WORDLENGTH_8B;
- huart2.Init.StopBits = UART_STOPBITS_1;
- huart2.Init.Parity = UART_PARITY_NONE;
- huart2.Init.Mode = UART_MODE_TX_RX;
- huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
- huart2.Init.OverSampling = UART_OVERSAMPLING_16;
- huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
- huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
- UART2_Pin_Init();
- if (HAL_UART_Init(&huart2) != HAL_OK)
- {
- Error_Handler();
- }
- LL_USART_DisableIT_TXE(huart2.Instance);
- //LL_USART_EnableDirectionRx(huart2.Instance);
- LL_USART_EnableDirectionTx(huart2.Instance);
- //LL_USART_EnableIT_RXNE(huart2.Instance);
- HAL_NVIC_EnableIRQ(USART2_IRQn);
- }
- void UART2_EnableTx(void) {
- USART_TypeDef *USARTx = huart2.Instance;
- if (!LL_USART_IsEnabledIT_TXE(USARTx)) {
- LL_USART_EnableIT_TXE(huart2.Instance);
- }
- }
- void UART2_TxData(u8 data) {
- LL_USART_TransmitData8(huart2.Instance, data);
- }
- __weak bool uart_tx_finished(void) {return true;}
- __weak void uart_rx_put(u8 ch) {};
- void uart2_irq_handler(void) {
- USART_TypeDef *USARTx = huart2.Instance;
- if (LL_USART_IsActiveFlag_RXNE(USARTx)){
- uart_rx_put(LL_USART_ReceiveData8(USARTx));
- }
- if (LL_USART_IsActiveFlag_TXE(USARTx)) {
- if (uart_tx_finished()){
- LL_USART_DisableIT_TXE(huart2.Instance);
- }
- }
- }
|