ScreenMaster485.c 1.1 KB

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