usart.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #include "usart.h"
  2. //重定向c库函数printf到串口,重定向后可使用printf函数
  3. int fputc(int ch, FILE *f)
  4. {
  5. /* 发送一个字节数据到串口 */
  6. USART_SendData(USART_232, (uint8_t) ch);
  7. /* 等待发送完毕 */
  8. while (USART_GetFlagStatus(USART_232, USART_FLAG_TXE) == RESET);
  9. return (ch);
  10. }
  11. //重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
  12. int fgetc(FILE *f)
  13. {
  14. /* 等待串口输入数据 */
  15. while (USART_GetFlagStatus(USART_232, USART_FLAG_RXNE) == RESET);
  16. return (int)USART_ReceiveData(USART_232);
  17. }
  18. // USART3的初始化
  19. //void USART3_config()
  20. //{
  21. // USART_InitTypeDef USART_InitStruct;
  22. // GPIO_InitTypeDef GPIO_InitStruct;
  23. // RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
  24. // RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  25. //
  26. // GPIO_PinAFConfig(USART3_RX_GPIO_PORT, USART3_RX_SOURCE, USART3_RX_AF);
  27. // GPIO_PinAFConfig(USART3_TX_GPIO_PORT, USART3_TX_SOURCE, USART3_TX_AF);
  28. //
  29. // GPIO_InitStruct.GPIO_Pin = USART3_TX_PIN ;
  30. // GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
  31. // GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  32. // GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
  33. // GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  34. // GPIO_Init(GPIOC, &GPIO_InitStruct);
  35. //
  36. // GPIO_InitStruct.GPIO_Pin = USART3_RX_PIN;
  37. // GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
  38. // GPIO_Init(GPIOC, &GPIO_InitStruct);
  39. // USART_InitStruct.USART_BaudRate = USART_BAUDRATE;
  40. // USART_InitStruct.USART_WordLength = USART_WordLength_8b;
  41. // USART_InitStruct.USART_StopBits = USART_StopBits_1;
  42. // USART_InitStruct.USART_Parity = USART_Parity_No;
  43. // USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  44. // USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  45. // USART_Init(USART3, &USART_InitStruct);
  46. // USART_Cmd(USART3, ENABLE);
  47. //
  48. // USART_ClearFlag(USART3, USART_FLAG_TC);
  49. // USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);
  50. // USART_ITConfig(USART3,USART_IT_IDLE,ENABLE);
  51. //
  52. // NVIC_InitTypeDef NVIC_InitStruct;
  53. // NVIC_InitStruct.NVIC_IRQChannel = USART3_IRQn;
  54. // NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
  55. // NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
  56. // NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  57. // NVIC_Init(&NVIC_InitStruct);
  58. //}
  59. void USART3_config()
  60. {
  61. USART_InitTypeDef USART_InitStruct;
  62. GPIO_InitTypeDef GPIO_InitStruct;
  63. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  64. RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
  65. GPIO_PinAFConfig(USART_232_RX_GPIO_PORT, USART_232_RX_SOURCE, USART_232_RX_AF);
  66. GPIO_PinAFConfig(USART_232_TX_GPIO_PORT, USART_232_TX_SOURCE, USART_232_TX_AF);
  67. GPIO_InitStruct.GPIO_Pin = USART_232_RX_PIN | USART_232_TX_PIN;
  68. GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
  69. GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  70. GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
  71. GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  72. GPIO_Init(GPIOA, &GPIO_InitStruct);
  73. USART_InitStruct.USART_BaudRate = USART_232_BAUDRATE;
  74. USART_InitStruct.USART_WordLength = USART_WordLength_8b;
  75. USART_InitStruct.USART_StopBits = USART_StopBits_1;
  76. USART_InitStruct.USART_Parity = USART_Parity_No;
  77. USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  78. USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  79. USART_Init(USART_232, &USART_InitStruct);
  80. USART_Cmd(USART_232, ENABLE);
  81. USART_ClearFlag(USART1, USART_FLAG_TC);
  82. USART_ITConfig(USART_232,USART_IT_RXNE,ENABLE);
  83. USART_ITConfig(USART_232,USART_IT_IDLE,ENABLE);
  84. // 配置USART1接收中断优先级
  85. NVIC_InitTypeDef NVIC_InitStruct;
  86. NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
  87. NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
  88. NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
  89. NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  90. NVIC_Init(&NVIC_InitStruct);
  91. }
  92. // USART3的中断函数
  93. void USART_232_IRQHandler(){
  94. call_back();
  95. }