UART.c 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* --------------------------- (C) COPYRIGHT 2021 Fortiortech ShenZhen -----------------------------
  2. File Name : UART.c
  3. Author : Fortiortech Appliction Team
  4. Version : V1.0
  5. Date : 2021-04-11
  6. Description : This file contains .C file function used for Motor Control.
  7. ----------------------------------------------------------------------------------------------------
  8. All Rights Reserved
  9. ------------------------------------------------------------------------------------------------- */
  10. #include <Myproject.h>
  11. /**
  12. * @brief Uart2初始化函数
  13. * @param None
  14. * @return none
  15. * @author Marcel
  16. * @date 2022-07-13
  17. * @version 1.0
  18. * @property Public
  19. */
  20. void UART2_Init(void)
  21. {
  22. SetBit(PH_SEL , UART2EN); //P3[6]as UART2_RXD; P3[7]as UART2_TXD
  23. #if 0
  24. ClrBit(P3_OE , P36); //输入使能
  25. SetBit(P3_PU , P36); //上拉电阻
  26. SetBit(P3_OE , P37); //输出使能
  27. SetBit(P3_PU , P37); //上拉电阻
  28. #endif
  29. ClrBit(UT2_CR , UT2MOD1); //00-->单线制8bit 01-->8bit uart(波特率可设置)
  30. SetBit(UT2_CR , UT2MOD0); //10-->单线制9bit 11-->9bit uart(波特率可设置)
  31. ClrBit(UT2_CR , UT2SM2); //0-->单机通讯 1-->多机通讯;
  32. SetBit(UT2_CR , UT2REN); //0-->不允许串行输入 1-->允许串行输入,软件清0;
  33. ClrBit(UT2_CR , UT2TB8); //模式2/3下数据发送第9位,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址
  34. ClrBit(UT2_CR , UT2RB8); //模式2/3下数据接收第9位,若SM2=0,作为停止位
  35. ClrBit(IP3 , PSPI_UT21); //中断优先级时最低
  36. ClrBit(IP3 , PSPI_UT20); //中断优先级时最低
  37. // PSPI_UT21 = 0; //中断优先级时最低
  38. // PSPI_UT20 = 0;
  39. ClrBit(UT2_BAUD , BAUD2_SEL);//倍频使能0-->Disable 1-->Enable
  40. // ClrBit(UT2_BAUD , UART2CH); //UART2端口功能转移使能0:P36->RXD P37->TXD 1:P01->RXD P00->TXD
  41. ClrBit(UT2_BAUD , UART2IEN); //UART2中断使能0-->Disable 1-->Enable
  42. UT2_BAUD = 0x000c; //波特率可设置 = 24000000/(16/(1+ UT_BAUD[BAUD_SEL]))/(UT_BAUD+1)
  43. //9B-->9600 0x000c-->115200 0x0005-->256000
  44. }
  45. void UART1_Init(void)
  46. {
  47. SetBit(PH_SEL , UART1EN); //P0[6]as UART2_RXD; P0[5]as UART2_TXD
  48. #if 0
  49. ClrBit(P0_OE , P06); //输入使能
  50. SetBit(P0_PU , P06); //上拉电阻
  51. SetBit(P0_OE , P05); //输出使能
  52. SetBit(P0_PU , P05); //上拉电阻
  53. #endif
  54. UT_MOD1 = 0; //00-->单线制8bit 01-->8bit uart(波特率可设置)
  55. UT_MOD0 = 1; //10-->单线制9bit 11-->9bit uart(波特率可设置)
  56. SM2 = 0; //0-->单机通讯 1-->多机通讯;
  57. REN = 1; //0-->不允许串行输入 1-->允许串行输入,软件清0;
  58. TB8 = 0; //模式2/3下数据发送第9位,在多机通信中,可用于判断当前数据帧的数据是地址还是数据,TB8=0为数据,TB8=1为地址
  59. RB8 = 0; //模式2/3下数据接收第9位,若SM2=0,作为停止位
  60. ClrBit(IP3 , PI2C_UT11); //中断优先级时最低
  61. ClrBit(IP3 , PI2C_UT10); //中断优先级时最低
  62. ClrBit(UT_BAUD , UART_2xBAUD); //倍频使能0-->Disable 1-->Enable
  63. ES0 = 0; //UART1中断使能0-->Disable 1-->Enable
  64. UT_BAUD = 0x000c;//波特率可设置 = 24000000/(16/(1+ UT_BAUD[BAUD_SEL]))/(UT_BAUD+1)
  65. //9B-->9600 0x000c-->115200
  66. }
  67. void put_char(unsigned char c)
  68. {
  69. UT2_DR = c;
  70. while(!ReadBit(UT2_CR , UT2TI));
  71. ClrBit(UT2_CR , UT2TI);
  72. }
  73. void put_string(unsigned char *str)
  74. {
  75. while(*str != 0)
  76. {
  77. put_char(*str);
  78. str++;
  79. }
  80. }