基于STM32和U10通讯模块的智能大棚控制系统软件设计 - 图文(4)

2020-02-20 17:50

鲁东大学本科毕业设计

图6 CAT1640写周期时序

CAT1640的读操作分为当前地址读取和选择地址读取两种,具体读取时序跟写操作类似,在此不再赘述。

4.2.2 CAT1640操作函数介绍

主要的操作函数如下:

uint8_t I2C_Read(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint16_t addr,uint8_t *buf,uint16_t num) //通过指定I2C接口读取多个字节数据,成功返回0 uint8_t I2C_Write(I2C_TypeDef *I2Cx,uint8_t I2C_Addr,uint16_t addr,uint8_t *buf,uint16_t num); //通过指定I2C接口写入多个字节数据,成功返回0

4.3 USART通讯部分

Usart 通讯部分主要是微处理器与电脑、U10手机模块的通讯。STM32F103系列MCU拥有3个USART,在本系统中Usart2用于MCU与U10通讯模块之间的通讯,Usart3用于MCU与电脑之间的通讯。

Usart的主要操作函数如下:

4.3.1对USART进行基本配置的函数

USART_Init(USARTx, &USART_InitStructure) //初始化串口 USART_Cmd(USARTx, ENABLE) //使能串口

USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE) //开启串口接

9

鲁东大学本科毕业设计

收中断

USART_ClearFlag(USARTx, USART_FLAG_TC) //清除串口发送完成中断

4.3.2串口的读写操作的函数

void Uartx_PutChar(u8 ch) //串口写单个字符函数 void Uartx_PutStr(char *str) //串口写字符串函数 void USARTx_IRQHandler(void) //串口读函数 {

while(USART_GetITStatus(USART2, USART_IT_RXNE) !=SET); TIM_Cmd(TIM2, ENABLE);

str2[x2]= USART_ReceiveData(USART2); x2++; }

4.4 温度检测函数

4.4.1 计算温度值程序

DS18B20存储的温度是16 位的带符号扩展的二进制补码形式

当工作在12位分辨率时,其中5个符号位,7个整数位,4个小数位 |---------整数----------|-----小数 分辨率 1/(2^4)=0.0625----| 低字节 | 2^3 | 2^2 | 2^1 | 2^0 | 2^(-1) | 2^(-2) | 2^(-3) | 2^(-4) |

|-----符号位:0->正 1->负-------|-----------整数-----------|

高字节 | s | s | s | s | s | 2^6 | 2^5 | 2^4 | 温度 = 符号位 + 整数 + 小数*0.0625 计算温度的程序如下:

float DS18B20_Get_Temp(void) {

uint8_t tpmsb, tplsb; short s_tem; float f_tem;

DS18B20_Rst();

DS18B20_Presence();

DS18B20_Write_Byte(0XCC); /* 跳过 ROM */

10

鲁东大学本科毕业设计

}

DS18B20_Write_Byte(0X44);

/* 开始转换 */

DS18B20_Rst();

DS18B20_Presence();

DS18B20_Write_Byte(0XCC); DS18B20_Write_Byte(0XBE);

tplsb = DS18B20_Read_Byte(); tpmsb = DS18B20_Read_Byte();

s_tem = tpmsb<<8; s_tem = s_tem | tplsb;

if( s_tem < 0 ) /* 负温度*/ f_tem = (~s_tem+1) * 0.0625; else f_tem = s_tem * 0.0625;

return f_tem;

/*跳过ROM */ /* 读温度值*/

4.4.2 DS18B20检测和初始化函数

static uint8_t DS18B20_Presence(void) {

uint8_t pulse_time = 0;

/* 主机设置为上拉输入 */ DS18B20_Mode_IPU();

/* 等待存在脉冲的到来,存在脉冲为一个60~240us的低电平信号 ,如果存在脉冲没有来则做超时处理,从机接收到主机的复位信号后,会在15~60us后给主机发一个存在脉冲*/

while( DS18B20_DATA_IN() && pulse_time<100 ) { pulse_time++; delay_us(1); }

/* 经过100us后,存在脉冲都还没有到来*/ if( pulse_time >=100 ) return 1; else pulse_time = 0;

/* 存在脉冲到来,且存在的时间不能超过240us */ while( !DS18B20_DATA_IN() && pulse_time<240 ) {

11

鲁东大学本科毕业设计

pulse_time++; delay_us(1); }

if( pulse_time >=240 ) return 1; else return 0; }

uint8_t DS18B20_Init(void) {

DS18B20_GPIO_Config(); DS18B20_Rst();

return DS18B20_Presence(); }

5 主要部分源程序

5.1 主函数部分

主函数中首先进行各个模块进行初始化,然后在循环函数中反复查询各个模块的状态,若状态有变化,则执行相应的操作。程序如下:

#include \#include #include extern u8 t3; extern tm timer; extern char str3[32]; extern char str2[200]; u8 AlarmReadBuffer[16];

u8 AlarmWriteBuffer[16]={17,30,1+2,4+8+16, 9,30,1+2+4+8+16,0, 3,0,0,1+2+4+8+16}; {

12

7,0,4+8+16,1+2,

// [0][1]conrelay1 [2][3] marks1 [4][5]conrelay2 [6][7] mars2 //[8][9]conrelay3 [10][11] marks3 [12][13]conrelay4 [14][15] mars4

int main(void)

鲁东大学本科毕业设计

RCC_Configuration(); GPIO_Configuration(); NVIC_Configuration(); USART3_Configuration(); USART2_Configuration(); I2C_Configuration(); Timer2_Configuration(); Timer3_Configuration(); delay_init(72); RTC_init();

//I2C_Write(I2C1,CAT1640,128,AlarmWriteBuffer,16 ); }

Start_U10(str2); delay_ms(2000); Check_10086(str2);

Uart2_PutStr(\delay_ms(50);

Uart2_PutStr(\delay_ms(50);

GPIO_Close_Relay(1+2+4+8+16); Check_Start(); while(1)

Check_sec(); Check_Data2(str2); Check_Data(str3); Check_Alarm(); Check_NewDay();

{

}

5.2 分析手机模块传来的数据的函数

void Check_Data2(char *str)

13


基于STM32和U10通讯模块的智能大棚控制系统软件设计 - 图文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:度米文库汇编之九年级励志格言个性签名

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: