标题:
STM32F103_485参考程序 源码
[打印本页]
作者:
gwq66
时间:
2018-4-28 15:22
标题:
STM32F103_485参考程序 源码
STM32F103_485单片机源程序如下:
#include "e070.h"
//***********************内部全局变量声明**********************************//
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; //用于进入设置状态
//***************************声明结束***************************************//
//***********************调用外部函数声明***********************************//
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; //串口接收完成信号量
extern osSemaphoreId Uart5WSemHandle; //串口发送完成信号量
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();
}
/*********************************************************************************************************/
/*函数名称:触摸屏 控制单灯或一组灯或全线测试 */
/*功能描述: */
/*返 回: */
/*2016年10月12日测试 */
/*********************************************************************************************************/
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个档位
{
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数值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);
}
}
/*********************************************************************************************************/
/*函数名称:触摸屏 向24C16写 系统参数 */
/*功能描述: */
/*返 回: */
/*2016年10月11日测试通过 */
/********************************************************************************************************/
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); //滞环参数,默认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);
}
}
/*********************************************************************************************************/
/*函数名称:触摸屏向2416写数字,一次写入一屏的参数 */
/*功能描述: */
/*返 回 */
/*2016年9月30日测试通过 */
/*********************************************************************************************************/
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个档位
{
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);
}
}
/*********************************************************************************************************/
/*函数名称:从触摸屏读控制单灯或一组灯或全线测试数据 */
/*功能描述: */
/*返 回: */
/*2016年10月12日测试 */
/*********************************************************************************************************/
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; //发送起始地址
out5buffer[4] = 0;
out5buffer[5] = 80; //查询64个字,128个字节
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状态变为发送
HAL_UART_Transmit_IT(&huart5,out5buffer,8); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165); //接收数据
osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信号量,等待时间<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有用的数据0,1到126,127
}
UART5_RX_BUF[0] = 0;
UART5_RX_BUF[1] = 0;
}
}
/*********************************************************************************************************/
/*函数名称:从触摸屏读系统参数 */
/*功能描述: */
/*返 回: */
/*2016年10月11日测试通过 */
/*********************************************************************************************************/
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; //发送起始地址
out5buffer[4] = 0;
out5buffer[5] = 80; //查询80个字,160个字节
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状态变为发送
HAL_UART_Transmit_IT(&huart5,out5buffer,8); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165); //接收数据
osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信号量,等待时间<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有用的数据0,1到126,127
}
UART5_RX_BUF[0] = 0;
UART5_RX_BUF[1] = 0;
}
}
/*********************************************************************************************************/
/*函数名称:从触摸屏读取80个字的数据 */
/*功能描述: */
/*返 回: */
/*2016年12月12日测试通过 */
/*********************************************************************************************************/
void UART5_read(uint16_t eview_data_addr)
{
uint8_t i,group;
group = (eview_data_addr - 3000) / 300; //0表示读出的第一组数据,1表示第二组
out5buffer[0] = 0x01;
out5buffer[1] = 0x03;
out5buffer[2] = eview_data_addr>>8;
out5buffer[3] = eview_data_addr; //发送起始地址
out5buffer[4] = 0;
out5buffer[5] = 80; //查询80个字,160个字节
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状态变为发送
HAL_UART_Transmit_IT(&huart5,out5buffer,8); //数据发送
osSemaphoreWait(Uart5WSemHandle,50); //等待发送完成信号量,等待时间<50ms
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
HAL_UART_Receive_IT(&huart5,UART5_RX_BUF,165); //接收数据
osSemaphoreWait(Uart5RSemHandle,50); //等待接收完成信号量,等待时间<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有用的数据0,1到126,127
}
UART5_RX_BUF[0]=0;
UART5_RX_BUF[1]=0;
}
}
/*********************************************************************************************************/
/*函数名称:发送一组数据到触摸屏 */
/*功能描述:发送一组数据到触摸屏,初始化时向触摸屏一组一组发送数据 */
/*返 回: */
/*2016年9月22日测试通过 */
/*功能参数:EVIEW中的首地址、发送数量、第几组灯数据 */
/*********************************************************************************************************/
void UART5_trsmet_term(uint16_t eview_data_addr,uint8_t number,uint8_t group)
{
eviewbuffer[0] = 0x01; //前4位为固定字节
eviewbuffer[1] = 0x10;
eviewbuffer[2] = eview_data_addr >> 8;
eviewbuffer[3] = eview_data_addr; //发送起始地址
eviewbuffer[4] = 0x00;
eviewbuffer[5] = number; //发送字的个数
eviewbuffer[6] = number * 2; //发送字节数
eview_eeprom_data(group); //eviewbuffer[7]到eviewbuffer[245]由此函数填充
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状态变为发送
HAL_UART_Transmit_IT(&huart5,eviewbuffer,249); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
osDelay(30); //等待屏幕处理
HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //伪接收,清空串口接收缓冲区
osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信号量
}
/*********************************************************************************************************/
/*函数名称:发送一组 控制 99数据到触摸屏 */
/*功能描述:发送一组数据到触摸屏,填充控制页面 */
/*返 回: */
/*********************************************************************************************************/
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; //发送起始地址
eviewbuffer[4] = 0x00;
eviewbuffer[5] = 80; //发送字的个数
eviewbuffer[6] = 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状态变为发送
HAL_UART_Transmit_IT(&huart5,eviewbuffer,249); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
osDelay(30); //等待屏幕处理
HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //伪接收,清空串口接收缓冲区
osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信号量
}
/*********************************************************************************************************/
/*功能描述:发送系统数据到触摸屏 */
/*返 回: */
/*2016年9月22日测试通过 */
/*EVIEW中的首地址、发送数量、第几组灯数据 */
/*********************************************************************************************************/
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; //发送起始地址
eviewbuffer[4] = 0x00;
eviewbuffer[5] = number; //发送字的个数
eviewbuffer[6] = number * 2; //发送字节数
eviewbuffer[7] = 0;
eviewbuffer[8] = gcode[0][150]; //主机地址,默认01
eviewbuffer[9] = 0;
eviewbuffer[10] = gcode[0][151]; //滞环参数,默认0.5
eviewbuffer[11] = 0;
eviewbuffer[12] = gcode[0][152]; //调光方式,0为有级
eviewbuffer[13] = gcode[0][153]; //参数a
eviewbuffer[14] = gcode[0][154];
eviewbuffer[15] = gcode[0][155]; //参数b
eviewbuffer[16] = gcode[0][156];
eviewbuffer[17] = gcode[0][157]; //duchuanganqi;判断哪个主机读取传感器
eviewbuffer[18] = gcode[0][158];
eviewbuffer[19] = gcode[0][159]; //继电器动作值,默认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状态变为发送
HAL_UART_Transmit_IT(&huart5,eviewbuffer,249); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
osDelay(30); //等待屏幕处理
HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //伪接收,清空串口接收缓冲区
osSemaphoreWait(Uart5RSemHandle,100); //等待发送完成信号量
}
/*********************************************************************************************************/
/*函数名称:发送工作数据到触摸屏 */
/*功能描述:发送一组数据到触摸屏 */
/*返 回: */
/*2016年9月23日测试通过 */
/*********************************************************************************************************/
void UART5_trsmet_workdata(void)
{
uint8_t i,group,MAaddr_Temp; //计数器,组别,地址
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; //发送起始地址
eviewworkdata[4] = 0x00;
eviewworkdata[5] = 44; //发送字的个数
eviewworkdata[6] = 88; //发送字节数
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_RESET); //RS485状态变为发送
HAL_UART_Transmit_IT(&huart5,eviewworkdata,97); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
osDelay(30); //等待屏幕处理
HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //伪接收,清空串口接收缓冲区
osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信号量
}
/*********************************************************************************************************/
/*函数名称:向触摸屏写1个字的数据 */
/*功能描述: */
/*返 回: */
/*2016年9月30日测试通过 */
/********************************************************************************************************/
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; //发送地址
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状态变为发送
HAL_UART_Transmit_IT(&huart5,out5buffer,8); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
osDelay(30); //等待屏幕处理
HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //伪接收,清空串口接收缓冲区
osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信号量
}
/*********************************************************************************************************/
/*函数名称:向触摸屏写2个字的数据 */
/*功能描述: */
/*返 回: */
/*2016年9月30日测试通过 */
/*********************************************************************************************************/
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; //发送地址
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状态变为发送
HAL_UART_Transmit_IT(&huart5,out5buffer,13); //数据发送
osSemaphoreWait(Uart5WSemHandle,100); //等待发送完成信号量
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_13, GPIO_PIN_SET); //RS485状态变为接收
osDelay(30); //等待屏幕处理
HAL_UART_Receive_IT(&huart5,&UART5_RX_BUF[0],1); //伪接收,清空串口接收缓冲区
osSemaphoreWait(Uart5RSemHandle,100); //等待接收完成信号量
}
/*********************************************************************************************************/
/*函数名称:将24C16中的2维数组变成一维 */
/*功能描述:读取AT24C16中的数据,共8组,每组5*24+4=124字节 */
/*返 回: */
/*2016年9月22日测试通过 */
/*********************************************************************************************************/
void eview_eeprom_data(uint8_t group)
{
uint8_t scope;
eviewbuffer[7] = 0;
eviewbuffer[8] = group+1; //显示第几组灯
eviewbuffer[9] = gcode[group][0]; //地址下限的高字节
eviewbuffer[10] = gcode[group][1]; //地址下限的低字节
eviewbuffer[11] = gcode[group][2]; //地址上限的高字节
eviewbuffer[12] = gcode[group][3]; //地址上限的低字节
for(scope=0;scope<=24;scope++)
{
eviewbuffer[6*scope+13] = gcode[group][0X04+4*scope]; //亮度下限的高字节
eviewbuffer[6*scope+14] = gcode[group][0X05+4*scope]; //亮度下限的低字节
eviewbuffer[6*scope+15] = 0;
eviewbuffer[6*scope+16] = gcode[group][0X06+4*scope]; //亮度上限的高字节
eviewbuffer[6*scope+17] = 0;
eviewbuffer[6*scope+18] = gcode[group][0X07+4*scope]; //亮度上限的低字节
}
}
/**************************************************************/
复制代码
所有资料51hei提供下载:
STM32_485参考程序.rar
(3.67 KB, 下载次数: 28)
2018-4-28 15:21 上传
点击文件名下载附件
STM32_485参考程序
下载积分: 黑币 -5
作者:
admin
时间:
2018-4-28 17:40
缺少头文件,与原理图 望补齐后评分
作者:
oyfmzyf
时间:
2018-10-9 15:22
这个包含的头文件是自己写的吗?还是写错了?
作者:
canfly
时间:
2019-4-15 22:36
感谢楼主分享,学习了!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1