uart2.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "hal/hal.h"
  2. #include "stm32f3xx_ll_usart.h"
  3. #include "uart2.h"
  4. static UART_HandleTypeDef huart2;
  5. static void UART2_Pin_Init(void){
  6. GPIO_InitTypeDef GPIO_InitStruct = {0};
  7. /* Peripheral clock enable */
  8. __HAL_RCC_USART2_CLK_ENABLE();
  9. __HAL_RCC_GPIOA_CLK_ENABLE();
  10. /**USART2 GPIO Configuration
  11. PA2 ------> USART2_TX
  12. PA3 ------> USART2_RX
  13. */
  14. GPIO_InitStruct.Pin = UART_TX_Pin|UART_RX_Pin;
  15. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  16. GPIO_InitStruct.Pull = GPIO_NOPULL;
  17. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  18. GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
  19. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  20. }
  21. void UART2_Init(void){
  22. huart2.Instance = USART2;
  23. huart2.Init.BaudRate = 115200;
  24. huart2.Init.WordLength = UART_WORDLENGTH_8B;
  25. huart2.Init.StopBits = UART_STOPBITS_1;
  26. huart2.Init.Parity = UART_PARITY_NONE;
  27. huart2.Init.Mode = UART_MODE_TX_RX;
  28. huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  29. huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  30. huart2.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  31. huart2.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  32. UART2_Pin_Init();
  33. if (HAL_UART_Init(&huart2) != HAL_OK)
  34. {
  35. Error_Handler();
  36. }
  37. LL_USART_DisableIT_TXE(huart2.Instance);
  38. LL_USART_DisableDirectionRx(huart2.Instance);
  39. LL_USART_EnableDirectionTx(huart2.Instance);
  40. HAL_NVIC_EnableIRQ(USART2_IRQn);
  41. }
  42. void UART2_EnableTx(void) {
  43. USART_TypeDef *USARTx = huart2.Instance;
  44. if (!LL_USART_IsEnabledIT_TXE(USARTx)) {
  45. LL_USART_EnableIT_TXE(huart2.Instance);
  46. }
  47. }
  48. void UART2_TxData(u8 data) {
  49. LL_USART_TransmitData8(huart2.Instance, data);
  50. }
  51. __weak bool uart_tx_finished(void) {return true;}
  52. void uart2_irq_handler(void) {
  53. USART_TypeDef *USARTx = huart2.Instance;
  54. if (LL_USART_IsActiveFlag_RXNE(USARTx)){
  55. }
  56. if (LL_USART_IsActiveFlag_TXE(USARTx)) {
  57. if (uart_tx_finished()){
  58. LL_USART_DisableIT_TXE(huart2.Instance);
  59. }
  60. }
  61. }