標(biāo)題:
STM32串口讀取IM1253B_LCD1602顯示程序
[打印本頁]
作者:
1245689
時間:
2021-4-25 21:32
標(biāo)題:
STM32串口讀取IM1253B_LCD1602顯示程序
Stm32利用串口讀取IM1253B的數(shù)據(jù)在并行傳輸?shù)?602顯示屏上
單片機(jī)源程序如下:
#include "Im1252.h"
#include "bsp_usart.h"
#define reveive_number 37
unsigned char Rx_Buffer[UART_BUFF_SIZE];
unsigned char receive_finished;
unsigned char Tx_Buffer[15];
ShowDataTypeDef ShowDataSTructure;
unsigned int calccrc(unsigned char crcbuf,unsigned int crc)
{
unsigned char i;
unsigned char chk;
crc=crc^crcbuf;
for(i=0;i<8;i++)
{
chk=(unsigned char)(crc&1);
crc=crc>>1;
crc=crc&0x7fff;
if (chk==1)
crc=crc^0xa001;
crc=crc&0xffff;
}
return crc;
}
//CRC數(shù)據(jù)校正生成
unsigned int chkcrc(unsigned char *buf,unsigned char len)
{
unsigned char hi,lo;
unsigned int i;
unsigned int crc;
crc=0xFFFF;
for(i=0;i<len;i++)
{
crc=calccrc(*buf,crc);
buf++;
}
hi=( unsigned char)(crc%256);
lo=( unsigned char)(crc/256);
crc=(((unsigned int)(hi))<<8)|lo;
return crc;
}
//讀取數(shù)據(jù)
void read_data(void)
{
union crcdata crcnow;
//定義一個地址區(qū)存放CRC校驗
// 到時間抄讀模塊,抄讀間隔 1 秒鐘(或其他)
Tx_Buffer[0]=Read_ID; //模塊的 ID 號,默認(rèn) ID 為 0x01
Tx_Buffer[1]=0x03;
Tx_Buffer[2]=0x00;
Tx_Buffer[3]=0x48;
Tx_Buffer[4]=0x00;
Tx_Buffer[5]=0x08;
crcnow.word16=chkcrc(Tx_Buffer,6);
Tx_Buffer[6]=crcnow.byte[1]; //CRC 效驗低字節(jié)在前
Tx_Buffer[7]=crcnow.byte[0]; //發(fā)送 8 個數(shù)據(jù),請根據(jù)單片機(jī)類型自己編程
Usart_SendArray(DEBUG_USARTx,Tx_Buffer,8);
}
//電能清零
void Clear_EnergyData(void)
{ //01 10 00 4B 00 02 04 00 00 00 00 B6 2C
union crcdata crcnow;
//定義一個地址區(qū)存放CRC校驗
// 到時間抄讀模塊,抄讀間隔 1 秒鐘(或其他)
Tx_Buffer[0]=Read_ID; //模塊的 ID 號,默認(rèn) ID 為 0x01
Tx_Buffer[1]=0x10;
Tx_Buffer[2]=0x00;
Tx_Buffer[3]=0x4B;
Tx_Buffer[4]=0x00;
Tx_Buffer[5]=0x02;
Tx_Buffer[6]=0x04;
Tx_Buffer[7]=0x00;
Tx_Buffer[8]=0x00;
Tx_Buffer[9]=0x00;
Tx_Buffer[10]=0x00;
crcnow.word16=chkcrc(Tx_Buffer,11);
Tx_Buffer[11]=crcnow.byte[1]; //CRC 效驗低字節(jié)在前
Tx_Buffer[12]=crcnow.byte[0]; //發(fā)送 8 個數(shù)據(jù),請根據(jù)單片機(jī)類型自己編程
Usart_SendArray(DEBUG_USARTx,Tx_Buffer,13);
}
//分析數(shù)據(jù)
void Analysis_data(void)
{
union crcdata crcnow;
if(Rx_Buffer[0]==Read_ID) //確認(rèn) ID 正確
{
crcnow.word16=chkcrc(Rx_Buffer,reveive_number-2); //reveive_numbe 是接收數(shù)據(jù)總長度
if((crcnow.byte[0]==Rx_Buffer[reveive_number-1])&&(crcnow.byte[1]==Rx_Buffer[reveive_number-2]))
{
// ShowDataStructure.Current_data1 = (uint8_t *)&Rx_Buffer[3];
//電壓數(shù)據(jù)
ShowDataSTructure.Voltage_data = (((uint32_t)(Rx_Buffer[3] ))<<24) |(((uint32_t)(Rx_Buffer[4]))<<16) |(((uint32_t)(Rx_Buffer[5]))<<8) |Rx_Buffer[6];
//電流數(shù)據(jù)
ShowDataSTructure.Current_data = (((uint32_t)(Rx_Buffer[7]))<<24) |(((uint32_t)(Rx_Buffer[8]))<<16) |(((uint32_t)(Rx_Buffer[9]))<<8) |Rx_Buffer[10];
//有功數(shù)據(jù)
ShowDataSTructure.Power_data = (((uint32_t)(Rx_Buffer[11]))<<24) |(((uint32_t)(Rx_Buffer[12]))<<16) |(((uint32_t)(Rx_Buffer[13]))<<8) |Rx_Buffer[14];
//有功總電能數(shù)據(jù)
ShowDataSTructure.Energy_data = (((uint32_t)(Rx_Buffer[15]))<<24) |(((uint32_t)(Rx_Buffer[16]))<<16) |(((uint32_t)(Rx_Buffer[17]))<<8) |Rx_Buffer[18];
//功率因數(shù)數(shù)據(jù)
ShowDataSTructure.Pf_data = (((uint32_t)(Rx_Buffer[19]))<<24) |(((uint32_t)(Rx_Buffer[20]))<<16) |(((uint32_t)(Rx_Buffer[21]))<<8) |Rx_Buffer[22];
//二氧化碳數(shù)據(jù)
ShowDataSTructure.CO2_data = (((uint32_t)(Rx_Buffer[23]))<<24) |(((uint32_t)(Rx_Buffer[24]))<<16) |(((uint32_t)(Rx_Buffer[25]))<<8) |Rx_Buffer[26];
//溫度數(shù)據(jù)
ShowDataSTructure.Tem_data = (((uint32_t)(Rx_Buffer[27]))<<24) |(((uint32_t)(Rx_Buffer[28]))<<16) |(((uint32_t)(Rx_Buffer[29]))<<8) |Rx_Buffer[30];
//頻率數(shù)據(jù)
ShowDataSTructure.Fre_data = (((uint32_t)(Rx_Buffer[31]))<<24) |(((uint32_t)(Rx_Buffer[32]))<<16) |(((uint32_t)(Rx_Buffer[33]))<<8) |Rx_Buffer[34];
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
單向電能.7z
(201.72 KB, 下載次數(shù): 87)
2021-4-26 16:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
blackboyz
時間:
2021-10-22 13:53
非常感謝,不知道8266怎么連
作者:
yyfight
時間:
2022-1-25 19:03
blackboyz 發(fā)表于 2021-10-22 13:53
非常感謝,不知道8266怎么連
你好,esp8266咋接會了嗎?
作者:
畢竟我不討喜
時間:
2022-9-23 09:01
大佬,請問一下IM1253B的RX和TX口接STM32的那兩個口,看不太懂程序
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1