前面記錄了空調控制的各個模塊的開發過程,這篇帖子對于之前的開發過程做一個總結。包含電路介紹、過程演示以及固件,開頭主要介紹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,為了預留部分空間,每一條命令分配150*2*4字節進行存儲。
當前在Data Flash中,開辟了3塊區域,分別存儲2條溫度指令,以及1條關機指令。
6、溫度控制邏輯
1、解碼溫度數據,測試命令能夠成功控制空調;可以成功控制,將數據保存到Flash,溫度控制的時候將數據讀取出來,等待信號控制。
2、大于27攝氏度,打開空調;溫度低于26攝氏度,關閉空調。
保存溫度數據:
選擇保存數據的地址:
7、系統構成
整個系統為了后期可以方便增加或者減少模塊,所有采用杜邦線連接各個模塊。因為紅外發射模塊的有效距離小于3米,所以使用了延長線-模塊如前面介紹。

固件代碼:
oled12864.zip(60.26 KB)
oled12864 - code.zip(9.43 MB)
復制鏈接https://mbb.eet-china.com/forum/topic/130402_1_1.html,或點擊閱讀原文帖內下載。
END


