STM32F103_485單片機(jī)源程序如下:
- #include "e070.h"
- //***********************內(nèi)部全局變量聲明**********************************//
- uint8_t eviewworkdata[300];
- uint8_t eviewbuffer[300];
- uint8_t eviewreadbuffer[12][300];
- uint8_t out5buffer[300];
- uint8_t UART5_RX_BUF[300];
- uint16_t CheckOUT;
- uint16_t shezhicanshu; //用于進(jìn)入設(shè)置狀態(tài)
- //***************************聲明結(jié)束***************************************//
- //***********************調(diào)用外部函數(shù)聲明***********************************//
- extern uint8_t gcode[8][200];
- extern uint16_t wailiangdu,neiliangdu,LAMP_addr,LAMP_term;
- extern uint16_t Bad_Num;
- extern uint8_t yadangshuju[40];
- extern uint8_t yadangshuju111[40];
- extern uint8_t TPWM1,TPWM2;
- extern uint8_t checkNum,wTpwm1,rTpwm2,goodNum;
- uint8_t E070CONT1,E070CONT2,E070CONT3,E070CONT4;
- extern osSemaphoreId Uart5RSemHandle; //串口接收完成信號(hào)量
- extern osSemaphoreId Uart5WSemHandle; //串口發(fā)送完成信號(hào)量
- void SCI5_Term(void)
- {
- UART5_trsmet_workdata();
- UART5_read(3000);
- UART5_read(3300);
- UART5_read(3600);
- UART5_read(3900);
- UART5_read(4200);
- UART5_read(4500);
- UART5_read(4800);
- UART5_read(5100);
- UART5_read_sys(2000);
- UART5_read_contr(2300);
-
- if((eviewreadbuffer[0][150]*256 + eviewreadbuffer[0][151]) == 1111) EVIEW_EEPROM(0);
- if((eviewreadbuffer[1][150]*256 + eviewreadbuffer[1][151]) == 1111) EVIEW_EEPROM(1);
- if((eviewreadbuffer[2][150]*256 + eviewreadbuffer[2][151]) == 1111) EVIEW_EEPROM(2);
- if((eviewreadbuffer[3][150]*256 + eviewreadbuffer[3][151]) == 1111) EVIEW_EEPROM(3);
- if((eviewreadbuffer[4][150]*256 + eviewreadbuffer[4][151]) == 1111) EVIEW_EEPROM(4);
- if((eviewreadbuffer[5][150]*256 + eviewreadbuffer[5][151]) == 1111) EVIEW_EEPROM(5);
- if((eviewreadbuffer[6][150]*256 + eviewreadbuffer[6][151]) == 1111) EVIEW_EEPROM(6);
- if((eviewreadbuffer[7][150]*256 + eviewreadbuffer[7][151]) == 1111) EVIEW_EEPROM(7);
- if((eviewreadbuffer[8][150]*256 + eviewreadbuffer[8][151]) == 1111) EVIEW_EEPROM_SYS();
- if((eviewreadbuffer[9][150]*256 + eviewreadbuffer[9][151]) == 1111) EVIEW_CONTRL();
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:觸摸屏 控制單燈或一組燈或全線測(cè)試 */
- /*功能描述: */
- /*返 回: */
- /*2016年10月12日測(cè)試 */
- /*********************************************************************************************************/
- void EVIEW_CONTRL(void)
- {
- uint8_t scope = 0;
- uint8_t group = 0;
- uint16_t AddL = 1; //地址下限
- uint16_t AddH = 10; //地址上限
- uint16_t LX; //亮度
- uint8_t BuffData[11];
-
- UART5_read_contr(2300);
- if((eviewreadbuffer[9][148]*256 + eviewreadbuffer[9][149]) == 6666)
- {
- E070CONT1 = 66;
- UART5_write_two_word(2372,TPWM1,TPWM2);
- }
- else if((eviewreadbuffer[9][148]*256 + eviewreadbuffer[9][149]) == 7777)
- {
- E070CONT1 = 77;
- LAMP_addr = eviewreadbuffer[9][0]*256+eviewreadbuffer[9][1];
- TPWM1 = eviewreadbuffer[9][3];
- TPWM2 = eviewreadbuffer[9][5];
- }
- else if((eviewreadbuffer[9][148]*256 + eviewreadbuffer[9][149]) == 8888)
- {
- E070CONT1 = 88;
- LAMP_term = eviewreadbuffer[9][7];
- TPWM1 = eviewreadbuffer[9][9];
- TPWM2 = eviewreadbuffer[9][11];
- }
- else
- {
- E070CONT1 = 0;
- }
- if((eviewreadbuffer[9][146]*256 + eviewreadbuffer[9][147]) == 12345)
- {
- for(group = 0;group <= 14;group = group + 2)
- {
- BuffData[0] = AddL >> 8;
- BuffData[1] = AddL;
- BuffData[2] = AddH >> 8;
- BuffData[3] = AddH;
- write_add_char(group,0,BuffData,4);
- AddL = AddH + 1;
- AddH = AddH + 10;
- LX = 5; //亮度下限
- for(scope = 0;scope <= 24;scope++) //24個(gè)檔位
- {
- BuffData[0] = LX >> 8;
- BuffData[1] = LX;
- BuffData[2] = scope*4 + group + 1;
- BuffData[3] = scope*3 + group + 1;
- write_add_char(group,0X04 + 4*scope,BuffData,4);
- LX = LX + 100 + scope + group; //將65000數(shù)值24等分
- }
- }
- BuffData[0] = 0x02;BuffData[1] = 0x05;BuffData[2] = 0x00;BuffData[3] = 0x00;
- BuffData[4] = 0x0a;BuffData[5] = 0x00;BuffData[6] = 0x01;BuffData[7] = 0x04;
- BuffData[8] = 0x57;BuffData[9] = 0x00;BuffData[10] = 0x10;
- write_add_char(0,150,BuffData,11);
-
- UART5_write_one_word(2373,54321);
- }
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:觸摸屏 向24C16寫 系統(tǒng)參數(shù) */
- /*功能描述: */
- /*返 回: */
- /*2016年10月11日測(cè)試通過 */
- /********************************************************************************************************/
- void EVIEW_EEPROM_SYS(void)
- {
- uint8_t BuffData[4] = {22,22,0x08,0xae};
- {
- write_add_char(0,150,&eviewreadbuffer[8][1],1); //地址
- write_add_char(0,151,&eviewreadbuffer[8][3],1); //滯環(huán)參數(shù),默認(rèn)0.5
- write_add_char(0,152,&eviewreadbuffer[8][5],9);
- write_add_char(0,98,BuffData,4); //3075 0X08AE=2222
-
- UART5_write_one_word(2075,2222);
- }
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:觸摸屏向2416寫數(shù)字,一次寫入一屏的參數(shù) */
- /*功能描述: */
- /*返 回 */
- /*2016年9月30日測(cè)試通過 */
- /*********************************************************************************************************/
- void EVIEW_EEPROM(uint8_t group2)
- {
- uint8_t scope2 ;
- uint16_t eview_data_addr;
- uint8_t BuffData[4] = {22,22,0x08,0xae};
-
- if(group2 == 0) eview_data_addr = 3000;
- if(group2 == 1) eview_data_addr = 3300;
- if(group2 == 2) eview_data_addr = 3600;
- if(group2 == 3) eview_data_addr = 3900;
- if(group2 == 4) eview_data_addr = 4200;
- if(group2 == 5) eview_data_addr = 4500;
- if(group2 == 6) eview_data_addr = 4800;
- if(group2 == 7) eview_data_addr = 5100;
- {
- write_add_char(2*group2,0X00,&(eviewreadbuffer[group2][2]),4);
- for(scope2=0;scope2<=24;scope2++) //24個(gè)檔位
- {
- write_add_char(2*group2,0X04+4*scope2,&(eviewreadbuffer[group2][6+6*scope2]),4);
- }
- write_add_char(2*group2,98,BuffData,4);
- eviewreadbuffer[group2][150] = 0x08; //只寫一遍
- eviewreadbuffer[group2][151] = 0xAE;
- UART5_write_one_word(eview_data_addr + 75,2222);
- }
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:從觸摸屏讀控制單燈或一組燈或全線測(cè)試數(shù)據(jù) */
- /*功能描述: */
- /*返 回: */
- /*2016年10月12日測(cè)試 */
- /*********************************************************************************************************/
- void UART5_read_contr(uint16_t eview_data_addr)
- {
- uint8_t i;
- out5buffer[0] = 0x01;
- out5buffer[1] = 0x03;
- out5buffer[2] = eview_data_addr >> 8;
- out5buffer[3] = eview_data_addr; //發(fā)送起始地址
- out5buffer[4] = 0;
- out5buffer[5] = 80; //查詢64個(gè)字,128個(gè)字節(jié)
- CheckOUT = CRC_Check(out5buffer,6);
- out5buffer[6] = CheckOUT;
- out5buffer[7] = CheckOUT >> 8;
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,out5buffer,8); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165); //接收數(shù)據(jù)
- osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信號(hào)量,等待時(shí)間<100ms
-
- if(UART5_RX_BUF[0] == 0x01 && UART5_RX_BUF[1] == 0x03)
- {
- for(i=0;i<160;i++)
- {
- eviewreadbuffer[9][i] = UART5_RX_BUF[3 + i]; //eviewreadbuffer有用的數(shù)據(jù)0,1到126,127
- }
- UART5_RX_BUF[0] = 0;
- UART5_RX_BUF[1] = 0;
- }
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:從觸摸屏讀系統(tǒng)參數(shù) */
- /*功能描述: */
- /*返 回: */
- /*2016年10月11日測(cè)試通過 */
- /*********************************************************************************************************/
- void UART5_read_sys(uint16_t eview_data_addr)
- {
- uint8_t i;
- out5buffer[0] = 0x01;
- out5buffer[1] = 0x03;
- out5buffer[2] = eview_data_addr >> 8;
- out5buffer[3] = eview_data_addr; //發(fā)送起始地址
- out5buffer[4] = 0;
- out5buffer[5] = 80; //查詢80個(gè)字,160個(gè)字節(jié)
- CheckOUT = CRC_Check(out5buffer,6);
- out5buffer[6] = CheckOUT;
- out5buffer[7] = CheckOUT >> 8;
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,out5buffer,8); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165); //接收數(shù)據(jù)
- osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信號(hào)量,等待時(shí)間<100ms
-
- if(UART5_RX_BUF[0] == 0x01 && UART5_RX_BUF[1] == 0x03)
- {
- for(i = 0;i < 160;i++)
- {
- eviewreadbuffer[8][i] = UART5_RX_BUF[3 + i]; //eviewreadbuffer有用的數(shù)據(jù)0,1到126,127
- }
- UART5_RX_BUF[0] = 0;
- UART5_RX_BUF[1] = 0;
- }
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:從觸摸屏讀取80個(gè)字的數(shù)據(jù) */
- /*功能描述: */
- /*返 回: */
- /*2016年12月12日測(cè)試通過 */
- /*********************************************************************************************************/
- void UART5_read(uint16_t eview_data_addr)
- {
- uint8_t i,group;
-
- group = (eview_data_addr - 3000) / 300; //0表示讀出的第一組數(shù)據(jù),1表示第二組
- out5buffer[0] = 0x01;
- out5buffer[1] = 0x03;
- out5buffer[2] = eview_data_addr>>8;
- out5buffer[3] = eview_data_addr; //發(fā)送起始地址
- out5buffer[4] = 0;
- out5buffer[5] = 80; //查詢80個(gè)字,160個(gè)字節(jié)
- CheckOUT = CRC_Check(out5buffer,6);
- out5buffer[6] = CheckOUT;
- out5buffer[7] = CheckOUT >> 8;
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,out5buffer,8); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,50); //等待發(fā)送完成信號(hào)量,等待時(shí)間<50ms
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165); //接收數(shù)據(jù)
- osSemaphoreWait(Uart5RSemHandle,50); //等待接收完成信號(hào)量,等待時(shí)間<50ms
- if(UART5_RX_BUF[0] == 0x01 && UART5_RX_BUF[1] == 0x03)
- {
- for(i = 0;i < 160;i++)
- {
- eviewreadbuffer[group][i] = UART5_RX_BUF[3+i]; //eviewreadbuffer有用的數(shù)據(jù)0,1到126,127
- }
- UART5_RX_BUF[0]=0;
- UART5_RX_BUF[1]=0;
- }
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:發(fā)送一組數(shù)據(jù)到觸摸屏 */
- /*功能描述:發(fā)送一組數(shù)據(jù)到觸摸屏,初始化時(shí)向觸摸屏一組一組發(fā)送數(shù)據(jù) */
- /*返 回: */
- /*2016年9月22日測(cè)試通過 */
- /*功能參數(shù):EVIEW中的首地址、發(fā)送數(shù)量、第幾組燈數(shù)據(jù) */
- /*********************************************************************************************************/
- void UART5_trsmet_term(uint16_t eview_data_addr,uint8_t number,uint8_t group)
- {
-
- eviewbuffer[0] = 0x01; //前4位為固定字節(jié)
- eviewbuffer[1] = 0x10;
- eviewbuffer[2] = eview_data_addr >> 8;
- eviewbuffer[3] = eview_data_addr; //發(fā)送起始地址
- eviewbuffer[4] = 0x00;
- eviewbuffer[5] = number; //發(fā)送字的個(gè)數(shù)
- eviewbuffer[6] = number * 2; //發(fā)送字節(jié)數(shù)
-
- eview_eeprom_data(group); //eviewbuffer[7]到eviewbuffer[245]由此函數(shù)填充
- eviewbuffer[246] = 246;
- CheckOUT = CRC_Check(eviewbuffer,247);
- eviewbuffer[247] = CheckOUT;
- eviewbuffer[248] = CheckOUT>>8;
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,eviewbuffer,249); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- osDelay(30); //等待屏幕處理
- HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //偽接收,清空串口接收緩沖區(qū)
- osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信號(hào)量
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:發(fā)送一組 控制 99數(shù)據(jù)到觸摸屏 */
- /*功能描述:發(fā)送一組數(shù)據(jù)到觸摸屏,填充控制頁面 */
- /*返 回: */
- /*********************************************************************************************************/
- void UART5_trsmet_contral(uint16_t eview_data_addr)
- {
- uint8_t j;
- for(j = 0;j < 250;j = j+2)
- {
- eviewbuffer[j] = 9;
- eviewbuffer[j+1] = 0;
- }
- eviewbuffer[0] = 0x01;
- eviewbuffer[1] = 0x10;
- eviewbuffer[2] = eview_data_addr >> 8;
- eviewbuffer[3] = eview_data_addr; //發(fā)送起始地址
- eviewbuffer[4] = 0x00;
- eviewbuffer[5] = 80; //發(fā)送字的個(gè)數(shù)
- eviewbuffer[6] = 160; //發(fā)送字節(jié)數(shù)
- eviewbuffer[246] = 246;
- CheckOUT = CRC_Check(eviewbuffer,247);
- eviewbuffer[247] = CheckOUT;
- eviewbuffer[248] = CheckOUT >> 8;
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,eviewbuffer,249); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- osDelay(30); //等待屏幕處理
- HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //偽接收,清空串口接收緩沖區(qū)
- osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信號(hào)量
- }
-
-
- /*********************************************************************************************************/
- /*功能描述:發(fā)送系統(tǒng)數(shù)據(jù)到觸摸屏 */
- /*返 回: */
- /*2016年9月22日測(cè)試通過 */
- /*EVIEW中的首地址、發(fā)送數(shù)量、第幾組燈數(shù)據(jù) */
- /*********************************************************************************************************/
- void UART5_trsmet_SYS(uint16_t eview_data_addr,uint8_t number)
- {
- uint8_t j;
- for(j=0;j<250;j++)
- {
- eviewbuffer[j]=0;
- }
- eviewbuffer[0] = 0x01;
- eviewbuffer[1] = 0x10;
- eviewbuffer[2] = eview_data_addr>>8;
- eviewbuffer[3] = eview_data_addr; //發(fā)送起始地址
- eviewbuffer[4] = 0x00;
- eviewbuffer[5] = number; //發(fā)送字的個(gè)數(shù)
- eviewbuffer[6] = number * 2; //發(fā)送字節(jié)數(shù)
- eviewbuffer[7] = 0;
- eviewbuffer[8] = gcode[0][150]; //主機(jī)地址,默認(rèn)01
- eviewbuffer[9] = 0;
- eviewbuffer[10] = gcode[0][151]; //滯環(huán)參數(shù),默認(rèn)0.5
- eviewbuffer[11] = 0;
- eviewbuffer[12] = gcode[0][152]; //調(diào)光方式,0為有級(jí)
- eviewbuffer[13] = gcode[0][153]; //參數(shù)a
- eviewbuffer[14] = gcode[0][154];
- eviewbuffer[15] = gcode[0][155]; //參數(shù)b
- eviewbuffer[16] = gcode[0][156];
- eviewbuffer[17] = gcode[0][157]; //duchuanganqi;判斷哪個(gè)主機(jī)讀取傳感器
- eviewbuffer[18] = gcode[0][158];
- eviewbuffer[19] = gcode[0][159]; //繼電器動(dòng)作值,默認(rèn)16
- eviewbuffer[20] = gcode[0][160];
- eviewbuffer[246] = 246;
- CheckOUT = CRC_Check(eviewbuffer,247);
- eviewbuffer[247] = CheckOUT;
- eviewbuffer[248] = CheckOUT >> 8;
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,eviewbuffer,249); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- osDelay(30); //等待屏幕處理
- HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //偽接收,清空串口接收緩沖區(qū)
- osSemaphoreWait(Uart5RSemHandle,100); //等待發(fā)送完成信號(hào)量
- }
-
- /*********************************************************************************************************/
- /*函數(shù)名稱:發(fā)送工作數(shù)據(jù)到觸摸屏 */
- /*功能描述:發(fā)送一組數(shù)據(jù)到觸摸屏 */
- /*返 回: */
- /*2016年9月23日測(cè)試通過 */
- /*********************************************************************************************************/
- void UART5_trsmet_workdata(void)
- {
- uint8_t i,group,MAaddr_Temp; //計(jì)數(shù)器,組別,地址
- uint8_t WPWM[10],RPWM[10]; //白色PWM,紅色PWM
- uint16_t qliangdu,liangdu,kongzhiliang_Temp;
-
- kongzhiliang_Temp = wailiangdu;
- MAaddr_Temp = gcode[0][150];
- eviewworkdata[0] = 0x01;
- eviewworkdata[1] = 0x10;
- eviewworkdata[2] = 0;
- eviewworkdata[3] = 0; //發(fā)送起始地址
- eviewworkdata[4] = 0x00;
- eviewworkdata[5] = 44; //發(fā)送字的個(gè)數(shù)
- eviewworkdata[6] = 88; //發(fā)送字節(jié)數(shù)
-
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,eviewworkdata,97); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- osDelay(30); //等待屏幕處理
- HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //偽接收,清空串口接收緩沖區(qū)
- osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信號(hào)量
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:向觸摸屏寫1個(gè)字的數(shù)據(jù) */
- /*功能描述: */
- /*返 回: */
- /*2016年9月30日測(cè)試通過 */
- /********************************************************************************************************/
- void UART5_write_one_word(uint16_t eview_data_addr,uint16_t data)
- {
- out5buffer[0] = 0x01;
- out5buffer[1] = 0x06;
- out5buffer[2] = eview_data_addr >> 8;
- out5buffer[3] = eview_data_addr; //發(fā)送地址
- out5buffer[4] = data >> 8;
- out5buffer[5] = data;
- CheckOUT = CRC_Check(out5buffer,6);
- out5buffer[6] = CheckOUT;
- out5buffer[7] = CheckOUT >> 8;
-
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,out5buffer,8); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- osDelay(30); //等待屏幕處理
- HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //偽接收,清空串口接收緩沖區(qū)
- osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信號(hào)量
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:向觸摸屏寫2個(gè)字的數(shù)據(jù) */
- /*功能描述: */
- /*返 回: */
- /*2016年9月30日測(cè)試通過 */
- /*********************************************************************************************************/
- void UART5_write_two_word(uint16_t eview_data_addr,uint16_t data1,uint16_t data2)
- {
- out5buffer[0] = 0x01;
- out5buffer[1] = 0x10;
- out5buffer[2] = eview_data_addr>>8;
- out5buffer[3] = eview_data_addr; //發(fā)送地址
- out5buffer[4] = 0;
- out5buffer[5] = 2;
- out5buffer[6] = 4;
- out5buffer[7] = data1 >> 8;
- out5buffer[8] = data1;
- out5buffer[9] = data2 >> 8;
- out5buffer[10] = data2;
-
- CheckOUT = CRC_Check(out5buffer,11);
- out5buffer[11] = CheckOUT;
- out5buffer[12] = CheckOUT >> 8;
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485狀態(tài)變?yōu)榘l(fā)送
- HAL_UART_Transmit_IT(&huart5,out5buffer,13); //數(shù)據(jù)發(fā)送
- osSemaphoreWait(Uart5WSemHandle,100); //等待發(fā)送完成信號(hào)量
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485狀態(tài)變?yōu)榻邮?br />
- osDelay(30); //等待屏幕處理
- HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //偽接收,清空串口接收緩沖區(qū)
- osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信號(hào)量
- }
- /*********************************************************************************************************/
- /*函數(shù)名稱:將24C16中的2維數(shù)組變成一維 */
- /*功能描述:讀取AT24C16中的數(shù)據(jù),共8組,每組5*24+4=124字節(jié) */
- /*返 回: */
- /*2016年9月22日測(cè)試通過 */
- /*********************************************************************************************************/
- void eview_eeprom_data(uint8_t group)
- {
- uint8_t scope;
- eviewbuffer[7] = 0;
- eviewbuffer[8] = group+1; //顯示第幾組燈
- eviewbuffer[9] = gcode[group][0]; //地址下限的高字節(jié)
- eviewbuffer[10] = gcode[group][1]; //地址下限的低字節(jié)
- eviewbuffer[11] = gcode[group][2]; //地址上限的高字節(jié)
- eviewbuffer[12] = gcode[group][3]; //地址上限的低字節(jié)
-
- for(scope=0;scope<=24;scope++)
- {
- eviewbuffer[6*scope+13] = gcode[group][0X04+4*scope]; //亮度下限的高字節(jié)
- eviewbuffer[6*scope+14] = gcode[group][0X05+4*scope]; //亮度下限的低字節(jié)
- eviewbuffer[6*scope+15] = 0;
- eviewbuffer[6*scope+16] = gcode[group][0X06+4*scope]; //亮度上限的高字節(jié)
- eviewbuffer[6*scope+17] = 0;
- eviewbuffer[6*scope+18] = gcode[group][0X07+4*scope]; //亮度上限的低字節(jié)
- }
- }
- /**************************************************************/
復(fù)制代碼
所有資料51hei提供下載:
STM32_485參考程序.rar
(3.67 KB, 下載次數(shù): 28)
2018-4-28 15:21 上傳
點(diǎn)擊文件名下載附件
STM32_485參考程序
|