空调控制各个模块的开发过程

描述

前面记录了空调控制的各个模块的开发过程,这篇帖子对于之前的开发过程做一个总结。包含威廉希尔官方网站 介绍、过程演示以及固件,开头主要介绍Flash的操作。

确认存储使用的FLash地址

1、查看Flash:

借助Jlink查看Flash的数据。

连接芯片:

FlaSh

读取整片Flash:

FlaSh

查看Data Flash区域:

FlaSh

写Flash的程序无法运行:R_FLASH_LP_bgo_example()。野火以及官方的资料使用的Flash都是基于外部Flash的,参考意义有限。最终参考FPS包自带的例程进行Flash的操作。

2、参考例程读写 Data Flash

当前方案:采用系统的API加入延时后,Flash写入成功(写入地址:0x4010_0000U):

FlaSh

Flash操作关键代码(注意:去掉了擦除检查,加上了延时!):

void R_FLASH_LP_basic_example (void)
{
/* Initialize p_src to known data */
vTaskDelay (10);
for (uint32_t i = 0; i < TRANSFER_LENGTH; i++)
{
g_src = (uint8_t) ('A' + (i % 26));
}
/* Open the flash lp instance. */
err = R_FLASH_LP_Open(&g_flash0_ctrl, &g_flash0_cfg);
assert(FSP_SUCCESS == err);
vTaskDelay (10);
/* Erase 1 block of data flash starting at block 0. */
err = R_FLASH_LP_Erase(&g_flash0_ctrl, FLASH_DF_BLOCK_0, 1);
assert(FSP_SUCCESS == err);
vTaskDelay (10);


/* Write 32 bytes to the first block of data flash. */
err = R_FLASH_LP_Write(&g_flash0_ctrl, (uint32_t) g_src, FLASH_DF_BLOCK_0, TRANSFER_LENGTH);
assert(FSP_SUCCESS == err);
vTaskDelay (10);


memcpy((uint32_t)g_dest, FLASH_DF_BLOCK_0, FLASH_LP_EXAMPLE_WRITE_SIZE);
///< 将数据使用串口发送出去
buff_len = FLASH_LP_EXAMPLE_WRITE_SIZE;//strlen(g_dest);
err = R_SCI_UART_Write(&g_uart0_ctrl, g_dest, buff_len);
if(FSP_SUCCESS != err) __BKPT();
while(uart_send_complete_flag == false){}
uart_send_complete_flag = false;
}

3、采用共用体存储浮点型数据

参考:https://code84.com/454972.html

4、当前存储遇到的问题

存储数据读取数据有问题,写入数据读取回来的数据匹配不上。

存取的数据为:

FlaSh

读取的数据:

首先定位:保存数据(进行Flash写操作)其实已经出问题了:

FlaSh

修改代码后,当前保存的数据没有问题:

解码的数据 保存的数据
FlaSh FlaSh

保存数据到127时出错(读取回来的数据为144):

FlaSh

定位到原因:当前数据量太大了,1片扇区为1024字节,1个温度数据就高达600个字节,每次默认只擦除1个扇区,所以在1K地址外的数据没有擦除就执行了写入,发生错误。

5、设置每一个电平的时间为32bit,使用4字节存储

26摄氏度的命令存储地址:

FlaSh

实际上,按照高电平+低电平的存储,每一条控制命令的存储字节为1200字节(后面想办法再压缩)。

1个电平存储的时间使用32bit数据来存储,也就是4字节存储。当前默认1条命令为139个PWM,为了预留部分空间,每一条命令分配15024字节进行存储。

当前在Data Flash中,开辟了3块区域,分别存储2条温度指令,以及1条关机指令。

6、温度控制逻辑

1、解码温度数据,测试命令能够成功控制空调;可以成功控制,将数据保存到Flash,温度控制的时候将数据读取出来,等待信号控制。

2、大于27摄氏度,打开空调;温度低于26摄氏度,关闭空调。

保存温度数据:

FlaSh

选择保存数据的地址:

FlaSh

7、系统构成

整个系统为了后期可以方便增加或者减少模块,所有采用杜邦线连接各个模块。因为红外发射模块的有效距离小于3米,所以使用了延长线-模块如前面介绍。

引脚分配:

I2C引脚:SDA0-P401,SCL0-P400;

红外接收GPIO引脚:P102 -INPUT;

红外发射GPIO引脚:P213 -PWM;

FlaSh

固件代码:

FlaSholed12864.zip(60.26 KB)

FlaSholed12864 - code.zip(9.43 MB)

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分