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

前面记录了空调控制的各个模块的开发过程,这篇帖子对于之前的开发过程做一个总结。包含电路介绍、过程演示以及固件,开头主要介绍flash的操作。
确认存储使用的flash地址
1、查看flash:
借助jlink查看flash的数据。
连接芯片:
读取整片flash:
查看data flash区域:
写flash的程序无法运行:r_flash_lp_bgo_example()。野火以及官方的资料使用的flash都是基于外部flash的,参考意义有限。最终参考fps包自带的例程进行flash的操作。
2、参考例程读写 data flash
当前方案:采用系统的api加入延时后,flash写入成功(写入地址:0x4010_0000u):
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写操作)其实已经出问题了:
修改代码后,当前保存的数据没有问题:
解码的数据保存的数据
保存数据到127时出错(读取回来的数据为144):
定位到原因:当前数据量太大了,1片扇区为1024字节,1个温度数据就高达600个字节,每次默认只擦除1个扇区,所以在1k地址外的数据没有擦除就执行了写入,发生错误。
5、设置每一个电平的时间为32bit,使用4字节存储
26摄氏度的命令存储地址:
实际上,按照高电平+低电平的存储,每一条控制命令的存储字节为1200字节(后面想办法再压缩)。
1个电平存储的时间使用32bit数据来存储,也就是4字节存储。当前默认1条命令为139个pwm,为了预留部分空间,每一条命令分配15024字节进行存储。
当前在data flash中,开辟了3块区域,分别存储2条温度指令,以及1条关机指令。
6、温度控制逻辑
1、解码温度数据,测试命令能够成功控制空调;可以成功控制,将数据保存到flash,温度控制的时候将数据读取出来,等待信号控制。
2、大于27摄氏度,打开空调;温度低于26摄氏度,关闭空调。
保存温度数据:
选择保存数据的地址:
7、系统构成
整个系统为了后期可以方便增加或者减少模块,所有采用杜邦线连接各个模块。因为红外发射模块的有效距离小于3米,所以使用了延长线-模块如前面介绍。
引脚分配:
i2c引脚:sda0-p401,scl0-p400;
红外接收gpio引脚:p102 -input;
红外发射gpio引脚:p213 -pwm;
固件代码:
oled12864.zip(60.26 kb)
oled12864 - code.zip(9.43 mb)

武汉中科电力作为氧化锌避雷器特性测试仪厂家,维护自身品牌形象
熔体压力传感器的工作原理和安装方法
小米49元插线板拆解:几千万研发都花在哪儿了?
想要最好还是更好?OPPOR9s、华为荣耀8、华为Nova哪个更适合女生?
OPPO Watch Free怎样的结构:手环外观,手表内芯
空调控制各个模块的开发过程
双核、四核算什么!100核处理器平板登场
中兴事件有感:一篇关于国产芯片和操作系统的往事回忆录
中国电信在无线电应用方面开展创新与实践
日程曝光!“NCDC网络与计算开发者大会”即将开幕
苹果发布汽车招聘岗位包括电池电源管理、道路安全和汽车体验等方面
电子战及电子支援措施(ESM)
PCB继电器作为控制电子器件,它的作用都有哪些
服务器被攻撃, 该如何处理?
基于PLC的机器人伺服控制系统
语音模块在智能台灯上的妙用
电流控制开关稳压器具有功能、性能和易用性的智能组合
ic封装测试是做什么?ic封测是什么意思?芯片封测是什么?
虹科IO-Link wireless嵌入式系统级模块,快速又标准化地开发你的IO-Link wireless设备
MIT研究人员开发出一种具有预测性人工智能的机器人