ScreenMaster485.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "ScreenMaster485.h"
  2. #include "usart.h"
  3. #include "Dwin.h"
  4. //////////////////////////////////////////////////////////////////////////////////
  5. void TestUsart3_Receive(void)
  6. {
  7. if((usart3_rx_flag)&&(USART3_RX_BUF[0]==0x12))
  8. {
  9. usart3_rx_flag=0;
  10. ScreenMaster485_Send_Data(USART3_RX_BUF,rx3_len);
  11. }
  12. }
  13. //RS485发送len个字节.
  14. //buf:发送区首地址
  15. //len:发送的字节数(为了和本代码的接收匹配,这里建议不要超过64个字节)
  16. uint8_t screen_buf[512];
  17. volatile uint8_t screen_delay=0;
  18. void ScreenMaster485_Send_Data(uint8_t *buf,uint8_t len)
  19. {
  20. int retry;
  21. do
  22. {
  23. osDelay(1);
  24. }while(huart3.gState != HAL_UART_STATE_READY);
  25. do
  26. {
  27. osDelay(1);
  28. }while(screen_delay);
  29. usart3_rx_flag=0;
  30. ScreenMaster485_TX_Set(1); //设置为发送模式
  31. // HAL_UART_Transmit(&huart3,buf,len,200);//串口3发送数据
  32. memcpy(screen_buf,buf,len);
  33. if(HAL_UART_Transmit_IT(&huart3,screen_buf,len)!=HAL_OK)
  34. {
  35. ScreenMaster485_TX_Set(0); //设置为接收模式
  36. }
  37. }
  38. //RS485模式控制.
  39. //en:0,接收;1,发送.
  40. void ScreenMaster485_TX_Set(uint8_t en)
  41. {
  42. if(en==1)HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
  43. else HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);
  44. }