usart.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "stm32l0xx_hal.h"
  2. #include "usart.h"
  3. #include <stdio.h>
  4. #include <string.h>
  5. #ifdef __GNUC__
  6. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  7. #else
  8. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  9. #endif
  10. UART_HandleTypeDef UartHandle;
  11. PUTCHAR_PROTOTYPE
  12. {
  13. UartHandle.Instance->TDR = ch & 0x01FF;
  14. //USART2->TDR = ch & 0x01FF;
  15. while (__HAL_USART_GET_FLAG(&UartHandle, USART_FLAG_TC) == RESET) {}
  16. //while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {}
  17. return ch;
  18. }
  19. //
  20. void usart_init(void)
  21. {
  22. GPIO_InitTypeDef GPIO_InitStruct;
  23. HAL_UART_DeInit(&UartHandle);
  24. __HAL_RCC_GPIOA_CLK_ENABLE();
  25. __HAL_RCC_USART2_CLK_ENABLE();
  26. GPIO_InitStruct.Pin = GPIO_PIN_2;
  27. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  28. GPIO_InitStruct.Pull = GPIO_PULLUP;
  29. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  30. GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
  31. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  32. GPIO_InitStruct.Pin = GPIO_PIN_3;
  33. GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
  34. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  35. UartHandle.Instance = USART2;
  36. UartHandle.Init.BaudRate = 115200;
  37. UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
  38. UartHandle.Init.StopBits = UART_STOPBITS_1;
  39. UartHandle.Init.Parity = UART_PARITY_NONE;
  40. UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  41. UartHandle.Init.Mode = UART_MODE_TX_RX;
  42. HAL_UART_Init(&UartHandle);
  43. }
  44. //
  45. void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
  46. {
  47. if (huart->Instance == USART2)
  48. {
  49. __HAL_RCC_USART2_FORCE_RESET();
  50. __HAL_RCC_USART2_RELEASE_RESET();
  51. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2);
  52. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3);
  53. }
  54. }