前面記錄了空調控制的各個模塊的開發過程,這篇帖子對于之前的開發過程做一個總結。包含電路介紹、過程演示以及固件,開頭主要介紹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米,所以使用了延長線-模塊如前面介紹。
引腳分配:
紅外接收GPIO引腳:P102 -INPUT;
紅外發射GPIO引腳:P213 -PWM;
固件代碼:
oled12864.zip(60.26 KB)
oled12864 - code.zip(9.43 MB)
-
電路
+關注
關注
172文章
5901瀏覽量
172135 -
FlaSh
+關注
關注
10文章
1633瀏覽量
147941 -
空調控制
+關注
關注
0文章
17瀏覽量
10947
發布評論請先 登錄
相關推薦
評論