UART.c 3.2 KB

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