找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4008|回复: 3
打印 上一主题 下一主题
收起左侧

STM32F103_485参考程序 源码

[复制链接]
跳转到指定楼层
楼主
ID:279560 发表于 2018-4-28 15:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103_485单片机源程序如下:
  1. #include "e070.h"

  2. //***********************内部全局变量声明**********************************//
  3. uint8_t eviewworkdata[300];       
  4. uint8_t eviewbuffer[300];
  5. uint8_t eviewreadbuffer[12][300];
  6. uint8_t out5buffer[300];
  7. uint8_t UART5_RX_BUF[300];
  8. uint16_t CheckOUT;
  9. uint16_t shezhicanshu;                                         //用于进入设置状态

  10. //***************************声明结束***************************************//
  11. //***********************调用外部函数声明***********************************//
  12. extern uint8_t gcode[8][200];
  13. extern uint16_t wailiangdu,neiliangdu,LAMP_addr,LAMP_term;
  14. extern uint16_t Bad_Num;

  15. extern uint8_t yadangshuju[40];
  16. extern uint8_t yadangshuju111[40];
  17. extern uint8_t TPWM1,TPWM2;
  18. extern uint8_t checkNum,wTpwm1,rTpwm2,goodNum;
  19. uint8_t E070CONT1,E070CONT2,E070CONT3,E070CONT4;

  20. extern osSemaphoreId  Uart5RSemHandle; //串口接收完成信号量
  21. extern osSemaphoreId  Uart5WSemHandle; //串口发送完成信号量

  22. void  SCI5_Term(void)
  23. {
  24.         UART5_trsmet_workdata();
  25.         UART5_read(3000);
  26.   UART5_read(3300);
  27.         UART5_read(3600);
  28.         UART5_read(3900);
  29.         UART5_read(4200);
  30.         UART5_read(4500);
  31.         UART5_read(4800);
  32.         UART5_read(5100);
  33.         UART5_read_sys(2000);
  34.         UART5_read_contr(2300);
  35.        
  36.         if((eviewreadbuffer[0][150]*256 + eviewreadbuffer[0][151]) == 1111) EVIEW_EEPROM(0);
  37.         if((eviewreadbuffer[1][150]*256 + eviewreadbuffer[1][151]) == 1111) EVIEW_EEPROM(1);                                                                                                               
  38.         if((eviewreadbuffer[2][150]*256 + eviewreadbuffer[2][151]) == 1111) EVIEW_EEPROM(2);
  39.         if((eviewreadbuffer[3][150]*256 + eviewreadbuffer[3][151]) == 1111) EVIEW_EEPROM(3);
  40.         if((eviewreadbuffer[4][150]*256 + eviewreadbuffer[4][151]) == 1111) EVIEW_EEPROM(4);
  41.         if((eviewreadbuffer[5][150]*256 + eviewreadbuffer[5][151]) == 1111) EVIEW_EEPROM(5);
  42.         if((eviewreadbuffer[6][150]*256 + eviewreadbuffer[6][151]) == 1111) EVIEW_EEPROM(6);
  43.         if((eviewreadbuffer[7][150]*256 + eviewreadbuffer[7][151]) == 1111) EVIEW_EEPROM(7);
  44.         if((eviewreadbuffer[8][150]*256 + eviewreadbuffer[8][151]) == 1111) EVIEW_EEPROM_SYS();
  45.         if((eviewreadbuffer[9][150]*256 + eviewreadbuffer[9][151]) == 1111) EVIEW_CONTRL();                                                                                                                                                                                                                                      
  46. }
  47. /*********************************************************************************************************/
  48. /*函数名称:触摸屏     控制单灯或一组灯或全线测试                                                        */
  49. /*功能描述:                                                                                             */
  50. /*返       回:                                                                                          */
  51. /*2016年10月12日测试                                                                                     */
  52. /*********************************************************************************************************/
  53. void EVIEW_CONTRL(void)
  54. {       
  55.         uint8_t scope = 0;
  56.         uint8_t group = 0;      
  57.         uint16_t AddL = 1;                                          //地址下限
  58.         uint16_t AddH = 10;                                          //地址上限
  59.         uint16_t LX;                                                      //亮度       
  60.         uint8_t BuffData[11];
  61.        
  62.         UART5_read_contr(2300);
  63.         if((eviewreadbuffer[9][148]*256 + eviewreadbuffer[9][149]) == 6666)
  64.         {
  65.                 E070CONT1 = 66;
  66.                 UART5_write_two_word(2372,TPWM1,TPWM2);                                       
  67.         }
  68.         else if((eviewreadbuffer[9][148]*256 + eviewreadbuffer[9][149]) == 7777)
  69.         {
  70.           E070CONT1 = 77;
  71.                 LAMP_addr = eviewreadbuffer[9][0]*256+eviewreadbuffer[9][1];       
  72.     TPWM1 =        eviewreadbuffer[9][3];
  73.     TPWM2 =        eviewreadbuffer[9][5];               
  74.         }        
  75.         else if((eviewreadbuffer[9][148]*256 + eviewreadbuffer[9][149]) == 8888)
  76.         {
  77.           E070CONT1 = 88;
  78.                 LAMP_term = eviewreadbuffer[9][7];       
  79.     TPWM1 =        eviewreadbuffer[9][9];
  80.     TPWM2 =        eviewreadbuffer[9][11];                                                                                
  81.         }
  82.         else
  83.         {
  84.            E070CONT1 = 0;                                                        
  85.         }
  86.         if((eviewreadbuffer[9][146]*256 + eviewreadbuffer[9][147]) == 12345)
  87.         {
  88.           for(group = 0;group <= 14;group = group + 2)
  89.                 {
  90.                          BuffData[0] = AddL >> 8;
  91.                          BuffData[1] = AddL;
  92.                          BuffData[2] = AddH >> 8;
  93.                          BuffData[3] = AddH;
  94.                          write_add_char(group,0,BuffData,4);   
  95.                    AddL = AddH + 1;
  96.                    AddH = AddH + 10;
  97.                    LX = 5;                                                                                //亮度下限

  98.                    for(scope = 0;scope <= 24;scope++)                 //24个档位
  99.                    {
  100.                                  BuffData[0] = LX >> 8;
  101.                                  BuffData[1] = LX;
  102.                                  BuffData[2] = scope*4 + group + 1;
  103.                                  BuffData[3] = scope*3 + group + 1;
  104.                                  write_add_char(group,0X04 + 4*scope,BuffData,4);       
  105.                                  LX = LX + 100 + scope + group;                          //将65000数值24等分                  
  106.                    }
  107.                 }
  108.                 BuffData[0] = 0x02;BuffData[1] = 0x05;BuffData[2] = 0x00;BuffData[3] = 0x00;
  109.                 BuffData[4] = 0x0a;BuffData[5] = 0x00;BuffData[6] = 0x01;BuffData[7] = 0x04;
  110.     BuffData[8] = 0x57;BuffData[9] = 0x00;BuffData[10] = 0x10;
  111.                 write_add_char(0,150,BuffData,11);
  112.                
  113.                 UART5_write_one_word(2373,54321);
  114.         }
  115. }

  116. /*********************************************************************************************************/
  117. /*函数名称:触摸屏 向24C16写     系统参数                                                                */
  118. /*功能描述:                                                                                             */
  119. /*返       回:                                                                                          */
  120. /*2016年10月11日测试通过                                                                                 */
  121. /********************************************************************************************************/
  122. void EVIEW_EEPROM_SYS(void)
  123. {
  124.         uint8_t BuffData[4] = {22,22,0x08,0xae};
  125.         {
  126.                 write_add_char(0,150,&eviewreadbuffer[8][1],1); //地址
  127.                 write_add_char(0,151,&eviewreadbuffer[8][3],1); //滞环参数,默认0.5       
  128.     write_add_char(0,152,&eviewreadbuffer[8][5],9);        

  129.     write_add_char(0,98,BuffData,4);                            //3075                0X08AE=2222                                                  
  130.                
  131.                 UART5_write_one_word(2075,2222);                           
  132.         }                                                                  
  133. }


  134. /*********************************************************************************************************/
  135. /*函数名称:触摸屏向2416写数字,一次写入一屏的参数                                                       */
  136. /*功能描述:                                                                                             */
  137. /*返       回                                                                                            */
  138. /*2016年9月30日测试通过                                                                                  */
  139. /*********************************************************************************************************/

  140. void EVIEW_EEPROM(uint8_t group2)
  141. {
  142.   uint8_t scope2 ;
  143.         uint16_t eview_data_addr;
  144.         uint8_t BuffData[4] = {22,22,0x08,0xae};
  145.        
  146.         if(group2 == 0) eview_data_addr = 3000;
  147.         if(group2 == 1) eview_data_addr = 3300;
  148.         if(group2 == 2) eview_data_addr = 3600;
  149.         if(group2 == 3) eview_data_addr = 3900;
  150.         if(group2 == 4) eview_data_addr = 4200;
  151.         if(group2 == 5) eview_data_addr = 4500;
  152.         if(group2 == 6) eview_data_addr = 4800;
  153.         if(group2 == 7) eview_data_addr = 5100;
  154.   {
  155.                 write_add_char(2*group2,0X00,&(eviewreadbuffer[group2][2]),4);                                                                                
  156.                 for(scope2=0;scope2<=24;scope2++)                                                           //24个档位
  157.                 {
  158.                         write_add_char(2*group2,0X04+4*scope2,&(eviewreadbuffer[group2][6+6*scope2]),4);                                                                                                                                                            
  159.                 }
  160.                 write_add_char(2*group2,98,BuffData,4);                         
  161.                 eviewreadbuffer[group2][150] = 0x08;                                     //只写一遍
  162.                 eviewreadbuffer[group2][151] = 0xAE;
  163.                 UART5_write_one_word(eview_data_addr + 75,2222);
  164.         }
  165. }



  166. /*********************************************************************************************************/
  167. /*函数名称:从触摸屏读控制单灯或一组灯或全线测试数据                                                     */
  168. /*功能描述:                                                                                             */
  169. /*返       回:                                                                                          */
  170. /*2016年10月12日测试                                                                                     */
  171. /*********************************************************************************************************/
  172. void UART5_read_contr(uint16_t  eview_data_addr)
  173. {
  174.         uint8_t  i;
  175.         out5buffer[0] = 0x01;
  176.         out5buffer[1] = 0x03;
  177.         out5buffer[2] = eview_data_addr >> 8;
  178.         out5buffer[3] = eview_data_addr;                                   //发送起始地址
  179.         out5buffer[4] = 0;
  180.         out5buffer[5] = 80;                                                        //查询64个字,128个字节
  181.         CheckOUT = CRC_Check(out5buffer,6);
  182.         out5buffer[6] = CheckOUT;
  183.         out5buffer[7] = CheckOUT >> 8;
  184.        
  185.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  186.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  187.         HAL_UART_Transmit_IT(&huart5,out5buffer,8);            //数据发送
  188.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  189.        
  190.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  191.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  192.         HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165);         //接收数据
  193.         osSemaphoreWait(Uart5RSemHandle,100);                 //等待接收完成信号量,等待时间<100ms
  194.        
  195.         if(UART5_RX_BUF[0] == 0x01 && UART5_RX_BUF[1] == 0x03)
  196.         {                       
  197.                 for(i=0;i<160;i++)
  198.                 {
  199.                         eviewreadbuffer[9][i] = UART5_RX_BUF[3 + i];                         //eviewreadbuffer有用的数据0,1到126,127
  200.                 }
  201.                 UART5_RX_BUF[0] = 0;
  202.                 UART5_RX_BUF[1] = 0;       
  203.         }                  
  204. }


  205. /*********************************************************************************************************/
  206. /*函数名称:从触摸屏读系统参数                                                                           */
  207. /*功能描述:                                                                                             */
  208. /*返       回:                                                                                          */
  209. /*2016年10月11日测试通过                                                                                 */
  210. /*********************************************************************************************************/
  211. void UART5_read_sys(uint16_t  eview_data_addr)
  212. {                        
  213.         uint8_t  i;       
  214.         out5buffer[0] = 0x01;                                 
  215.         out5buffer[1] = 0x03;
  216.         out5buffer[2] = eview_data_addr >> 8;
  217.         out5buffer[3] = eview_data_addr;                  //发送起始地址
  218.         out5buffer[4] = 0;
  219.         out5buffer[5] = 80;                                       //查询80个字,160个字节
  220.         CheckOUT = CRC_Check(out5buffer,6);
  221.         out5buffer[6] = CheckOUT;
  222.         out5buffer[7] = CheckOUT >> 8;

  223.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  224.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  225.         HAL_UART_Transmit_IT(&huart5,out5buffer,8);            //数据发送
  226.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  227.        
  228.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  229.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  230.         HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165);         //接收数据
  231.         osSemaphoreWait(Uart5RSemHandle,100);                 //等待接收完成信号量,等待时间<100ms
  232.        
  233.         if(UART5_RX_BUF[0] == 0x01 && UART5_RX_BUF[1] == 0x03)
  234.         {                       
  235.                 for(i = 0;i < 160;i++)
  236.                 {
  237.                         eviewreadbuffer[8][i] = UART5_RX_BUF[3 + i];                         //eviewreadbuffer有用的数据0,1到126,127
  238.                 }
  239.                 UART5_RX_BUF[0] = 0;
  240.                 UART5_RX_BUF[1] = 0;
  241.         }
  242. }
  243. /*********************************************************************************************************/
  244. /*函数名称:从触摸屏读取80个字的数据                                                                     */
  245. /*功能描述:                                                                                             */
  246. /*返       回:                                                                                          */
  247. /*2016年12月12日测试通过                                                                                 */
  248. /*********************************************************************************************************/

  249. void UART5_read(uint16_t  eview_data_addr)
  250. {
  251.         uint8_t i,group;
  252.        
  253.         group = (eview_data_addr - 3000) / 300; //0表示读出的第一组数据,1表示第二组
  254.         out5buffer[0] = 0x01;
  255.         out5buffer[1] = 0x03;
  256.         out5buffer[2] = eview_data_addr>>8;
  257.         out5buffer[3] = eview_data_addr;                    //发送起始地址
  258.         out5buffer[4] = 0;
  259.         out5buffer[5] = 80;                                         //查询80个字,160个字节
  260.         CheckOUT = CRC_Check(out5buffer,6);
  261.         out5buffer[6] = CheckOUT;
  262.         out5buffer[7] = CheckOUT >> 8;

  263.        
  264.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  265.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  266.         HAL_UART_Transmit_IT(&huart5,out5buffer,8);            //数据发送
  267.         osSemaphoreWait(Uart5WSemHandle,50);        //等待发送完成信号量,等待时间<50ms
  268.        
  269.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  270.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  271.         HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165);         //接收数据
  272.         osSemaphoreWait(Uart5RSemHandle,50);                 //等待接收完成信号量,等待时间<50ms

  273.         if(UART5_RX_BUF[0] == 0x01 && UART5_RX_BUF[1] == 0x03)
  274.         {                       
  275.                 for(i = 0;i < 160;i++)
  276.                 {
  277.                         eviewreadbuffer[group][i] = UART5_RX_BUF[3+i];                        //eviewreadbuffer有用的数据0,1到126,127
  278.                 }
  279.                 UART5_RX_BUF[0]=0;
  280.                 UART5_RX_BUF[1]=0;
  281.         }

  282. }



  283. /*********************************************************************************************************/
  284. /*函数名称:发送一组数据到触摸屏                                                                         */
  285. /*功能描述:发送一组数据到触摸屏,初始化时向触摸屏一组一组发送数据                                       */
  286. /*返       回:                                                                                          */
  287. /*2016年9月22日测试通过                                                                                  */
  288. /*功能参数:EVIEW中的首地址、发送数量、第几组灯数据                                                      */
  289. /*********************************************************************************************************/
  290. void UART5_trsmet_term(uint16_t  eview_data_addr,uint8_t number,uint8_t group)
  291. {
  292.   
  293.         eviewbuffer[0] = 0x01;                                           //前4位为固定字节
  294.         eviewbuffer[1] = 0x10;
  295.         eviewbuffer[2] = eview_data_addr >> 8;
  296.         eviewbuffer[3] = eview_data_addr;                     //发送起始地址
  297.   eviewbuffer[4] = 0x00;          
  298.         eviewbuffer[5] = number;                             //发送字的个数
  299.         eviewbuffer[6] = number * 2;                         //发送字节数
  300.        
  301.         eview_eeprom_data(group);                       //eviewbuffer[7]到eviewbuffer[245]由此函数填充
  302.         eviewbuffer[246] = 246;
  303.         CheckOUT = CRC_Check(eviewbuffer,247);

  304.         eviewbuffer[247] = CheckOUT;
  305.         eviewbuffer[248] = CheckOUT>>8;
  306.        
  307.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  308.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  309.         HAL_UART_Transmit_IT(&huart5,eviewbuffer,249);         //数据发送
  310.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  311.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  312.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  313.         osDelay(30);                                           //等待屏幕处理
  314.         HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1);       //伪接收,清空串口接收缓冲区
  315.         osSemaphoreWait(Uart5RSemHandle,100);        //等待接收完成信号量
  316. }

  317. /*********************************************************************************************************/
  318. /*函数名称:发送一组 控制 99数据到触摸屏                                                                 */
  319. /*功能描述:发送一组数据到触摸屏,填充控制页面                                                           */
  320. /*返       回:                                                                                          */
  321. /*********************************************************************************************************/
  322. void UART5_trsmet_contral(uint16_t  eview_data_addr)
  323. {
  324.         uint8_t j;
  325.   for(j = 0;j < 250;j = j+2)
  326.         {
  327.                 eviewbuffer[j] = 9;
  328.     eviewbuffer[j+1] = 0;                       
  329.         }                              
  330.         eviewbuffer[0] = 0x01;                                       
  331.         eviewbuffer[1] = 0x10;
  332.         eviewbuffer[2] = eview_data_addr >> 8;
  333.         eviewbuffer[3] = eview_data_addr;                                   //发送起始地址
  334.         eviewbuffer[4] = 0x00;          
  335.         eviewbuffer[5] = 80;                                               //发送字的个数          
  336.         eviewbuffer[6] = 160;                                               //发送字节数                          
  337.         eviewbuffer[246] = 246;
  338.         CheckOUT = CRC_Check(eviewbuffer,247);
  339.         eviewbuffer[247] = CheckOUT;
  340.         eviewbuffer[248] = CheckOUT >> 8;               
  341.        
  342.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  343.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  344.         HAL_UART_Transmit_IT(&huart5,eviewbuffer,249);         //数据发送
  345.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  346.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  347.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  348.         osDelay(30);                                           //等待屏幕处理
  349.         HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1);       //伪接收,清空串口接收缓冲区
  350.         osSemaphoreWait(Uart5RSemHandle,100);        //等待接收完成信号量
  351. }       
  352.        

  353.        

  354. /*********************************************************************************************************/                                                                                            
  355. /*功能描述:发送系统数据到触摸屏                                                                         */
  356. /*返       回:                                                                                          */
  357. /*2016年9月22日测试通过                                                                                  */
  358. /*EVIEW中的首地址、发送数量、第几组灯数据                                                                */
  359. /*********************************************************************************************************/
  360. void UART5_trsmet_SYS(uint16_t  eview_data_addr,uint8_t number)
  361. {
  362.   uint8_t j;
  363.   for(j=0;j<250;j++)
  364.         {
  365.                 eviewbuffer[j]=0;
  366.         }
  367.         eviewbuffer[0] = 0x01;
  368.         eviewbuffer[1] = 0x10;
  369.         eviewbuffer[2] = eview_data_addr>>8;
  370.         eviewbuffer[3] = eview_data_addr;                  //发送起始地址
  371.         eviewbuffer[4] = 0x00;
  372.         eviewbuffer[5] = number;                          //发送字的个数
  373.         eviewbuffer[6] = number * 2;                      //发送字节数
  374.         eviewbuffer[7] = 0;
  375.         eviewbuffer[8] = gcode[0][150];                                //主机地址,默认01
  376.         eviewbuffer[9] = 0;
  377.         eviewbuffer[10] = gcode[0][151];                        //滞环参数,默认0.5
  378.         eviewbuffer[11] = 0;
  379.         eviewbuffer[12] = gcode[0][152];                        //调光方式,0为有级
  380.         eviewbuffer[13] = gcode[0][153];                        //参数a
  381.         eviewbuffer[14] = gcode[0][154];
  382.         eviewbuffer[15] = gcode[0][155];                        //参数b
  383.         eviewbuffer[16] = gcode[0][156];
  384.         eviewbuffer[17] = gcode[0][157];                        //duchuanganqi;判断哪个主机读取传感器
  385.         eviewbuffer[18] = gcode[0][158];
  386.         eviewbuffer[19] = gcode[0][159];                        //继电器动作值,默认16
  387.         eviewbuffer[20] = gcode[0][160];

  388.         eviewbuffer[246] = 246;
  389.         CheckOUT = CRC_Check(eviewbuffer,247);
  390.   eviewbuffer[247] = CheckOUT;
  391.         eviewbuffer[248] = CheckOUT >> 8;
  392.        
  393.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  394.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  395.         HAL_UART_Transmit_IT(&huart5,eviewbuffer,249);         //数据发送
  396.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  397.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  398.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  399.         osDelay(30);                                           //等待屏幕处理
  400.         HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1);       //伪接收,清空串口接收缓冲区
  401.         osSemaphoreWait(Uart5RSemHandle,100);        //等待发送完成信号量
  402. }       
  403.        


  404. /*********************************************************************************************************/
  405. /*函数名称:发送工作数据到触摸屏                                                                         */
  406. /*功能描述:发送一组数据到触摸屏                                                                         */
  407. /*返       回:                                                                                          */
  408. /*2016年9月23日测试通过                                                                                  */
  409. /*********************************************************************************************************/
  410. void UART5_trsmet_workdata(void)
  411. {
  412.         uint8_t i,group,MAaddr_Temp;                   //计数器,组别,地址
  413.   uint8_t WPWM[10],RPWM[10];                     //白色PWM,红色PWM
  414.         uint16_t qliangdu,liangdu,kongzhiliang_Temp;
  415.    
  416.   kongzhiliang_Temp = wailiangdu;
  417.         MAaddr_Temp = gcode[0][150];
  418.         eviewworkdata[0] = 0x01;
  419.         eviewworkdata[1] = 0x10;
  420.         eviewworkdata[2] = 0;
  421.         eviewworkdata[3] = 0;                                       //发送起始地址
  422.   eviewworkdata[4] = 0x00;          
  423.         eviewworkdata[5] = 44;                                     //发送字的个数
  424.   eviewworkdata[6] = 88;                                     //发送字节数
  425.   
  426.           

  427.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  428.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  429.         HAL_UART_Transmit_IT(&huart5,eviewworkdata,97);         //数据发送
  430.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  431.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  432.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  433.         osDelay(30);                                           //等待屏幕处理
  434.         HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1);       //伪接收,清空串口接收缓冲区
  435.         osSemaphoreWait(Uart5RSemHandle,100);        //等待接收完成信号量
  436. }       

  437. /*********************************************************************************************************/
  438. /*函数名称:向触摸屏写1个字的数据                                                                        */
  439. /*功能描述:                                                                                             */
  440. /*返       回:                                                                                          */
  441. /*2016年9月30日测试通过                                                                                  */
  442. /********************************************************************************************************/

  443. void UART5_write_one_word(uint16_t  eview_data_addr,uint16_t  data)
  444. {
  445.         out5buffer[0] = 0x01;
  446.         out5buffer[1] = 0x06;
  447.         out5buffer[2] = eview_data_addr >> 8;
  448.         out5buffer[3] = eview_data_addr;                  //发送地址
  449.         out5buffer[4] = data >> 8;
  450.         out5buffer[5] = data;
  451.         CheckOUT = CRC_Check(out5buffer,6);
  452.         out5buffer[6] = CheckOUT;
  453.         out5buffer[7] = CheckOUT >> 8;
  454.        
  455.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  456.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  457.         HAL_UART_Transmit_IT(&huart5,out5buffer,8);            //数据发送
  458.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  459.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  460.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  461.         osDelay(30);                                           //等待屏幕处理
  462.         HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1);       //伪接收,清空串口接收缓冲区
  463.         osSemaphoreWait(Uart5RSemHandle,100);        //等待接收完成信号量       
  464. }
  465. /*********************************************************************************************************/
  466. /*函数名称:向触摸屏写2个字的数据                                                                        */
  467. /*功能描述:                                                                                             */
  468. /*返       回:                                                                                          */
  469. /*2016年9月30日测试通过                                                                                  */
  470. /*********************************************************************************************************/

  471. void UART5_write_two_word(uint16_t  eview_data_addr,uint16_t  data1,uint16_t  data2)
  472. {
  473.         out5buffer[0] = 0x01;
  474.         out5buffer[1] = 0x10;
  475.         out5buffer[2] = eview_data_addr>>8;
  476.         out5buffer[3] = eview_data_addr;                  //发送地址
  477.         out5buffer[4] = 0;
  478.         out5buffer[5] = 2;
  479.         out5buffer[6] = 4;
  480.         out5buffer[7] = data1 >> 8;
  481.         out5buffer[8] = data1;                          
  482.         out5buffer[9] = data2 >> 8;
  483.         out5buffer[10] = data2;
  484.   
  485.         CheckOUT = CRC_Check(out5buffer,11);
  486.         out5buffer[11] = CheckOUT;
  487.         out5buffer[12] = CheckOUT >> 8;

  488.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
  489.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
  490.         HAL_UART_Transmit_IT(&huart5,out5buffer,13);            //数据发送
  491.         osSemaphoreWait(Uart5WSemHandle,100);        //等待发送完成信号量
  492.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
  493.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);         //RS485状态变为接收
  494.         osDelay(30);                                           //等待屏幕处理
  495.         HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1);       //伪接收,清空串口接收缓冲区
  496.         osSemaphoreWait(Uart5RSemHandle,100);        //等待接收完成信号量       
  497. }

  498. /*********************************************************************************************************/
  499. /*函数名称:将24C16中的2维数组变成一维                                                                   */
  500. /*功能描述:读取AT24C16中的数据,共8组,每组5*24+4=124字节                                               */
  501. /*返       回:                                                                                          */
  502. /*2016年9月22日测试通过                                                                                  */
  503. /*********************************************************************************************************/
  504. void eview_eeprom_data(uint8_t group)
  505. {          
  506.         uint8_t scope;

  507.         eviewbuffer[7] = 0;
  508.         eviewbuffer[8] = group+1;                             //显示第几组灯
  509.         eviewbuffer[9] = gcode[group][0];         //地址下限的高字节
  510.         eviewbuffer[10] = gcode[group][1]; //地址下限的低字节
  511.         eviewbuffer[11] = gcode[group][2]; //地址上限的高字节
  512.         eviewbuffer[12] = gcode[group][3]; //地址上限的低字节
  513.        
  514.         for(scope=0;scope<=24;scope++)
  515.         {
  516.                 eviewbuffer[6*scope+13] = gcode[group][0X04+4*scope];         //亮度下限的高字节
  517.                 eviewbuffer[6*scope+14] = gcode[group][0X05+4*scope];         //亮度下限的低字节
  518.                 eviewbuffer[6*scope+15] = 0;
  519.                 eviewbuffer[6*scope+16] = gcode[group][0X06+4*scope];         //亮度上限的高字节
  520.                 eviewbuffer[6*scope+17] = 0;
  521.                 eviewbuffer[6*scope+18] = gcode[group][0X07+4*scope];         //亮度上限的低字节               
  522.         }
  523. }

  524. /**************************************************************/

复制代码

所有资料51hei提供下载:
STM32_485参考程序.rar (3.67 KB, 下载次数: 28)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2018-4-28 17:40 | 只看该作者
缺少头文件,与原理图 望补齐后评分
回复

使用道具 举报

板凳
ID:407041 发表于 2018-10-9 15:22 | 只看该作者
这个包含的头文件是自己写的吗?还是写错了?
回复

使用道具 举报

地板
ID:513175 发表于 2019-4-15 22:36 | 只看该作者
感谢楼主分享,学习了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表