前面記錄了空調(diào)控制的各個模塊的開發(fā)過程,這篇帖子對于之前的開發(fā)過程做一個總結(jié)。包含電路介紹、過程演示以及固件,開頭主要介紹Flash的操作。
確認存儲使用的FLash地址
1、查看Flash:
借助Jlink查看Flash的數(shù)據(jù)。
連接芯片:
讀取整片F(xiàn)lash:
查看Data Flash區(qū)域:
寫Flash的程序無法運行:R_FLASH_LP_bgo_example()。野火以及官方的資料使用的Flash都是基于外部Flash的,參考意義有限。最終參考FPS包自帶的例程進行Flash的操作。
2、參考例程讀寫 Data Flash
當前方案:采用系統(tǒng)的API加入延時后,F(xiàn)lash寫入成功(寫入地址:0x4010_0000U):
Flash操作關(guān)鍵代碼(注意:去掉了擦除檢查,加上了延時!):
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);
///< 將數(shù)據(jù)使用串口發(fā)送出去
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、采用共用體存儲浮點型數(shù)據(jù)
參考:https://code84.com/454972.html
4、當前存儲遇到的問題
存儲數(shù)據(jù)讀取數(shù)據(jù)有問題,寫入數(shù)據(jù)讀取回來的數(shù)據(jù)匹配不上。
存取的數(shù)據(jù)為:
讀取的數(shù)據(jù):
首先定位:保存數(shù)據(jù)(進行Flash寫操作)其實已經(jīng)出問題了:
修改代碼后,當前保存的數(shù)據(jù)沒有問題:
解碼的數(shù)據(jù) | 保存的數(shù)據(jù) |
---|---|
![]() |
![]() |
保存數(shù)據(jù)到127時出錯(讀取回來的數(shù)據(jù)為144):
定位到原因:當前數(shù)據(jù)量太大了,1片扇區(qū)為1024字節(jié),1個溫度數(shù)據(jù)就高達600個字節(jié),每次默認只擦除1個扇區(qū),所以在1K地址外的數(shù)據(jù)沒有擦除就執(zhí)行了寫入,發(fā)生錯誤。
5、設置每一個電平的時間為32bit,使用4字節(jié)存儲
26攝氏度的命令存儲地址:
實際上,按照高電平+低電平的存儲,每一條控制命令的存儲字節(jié)為1200字節(jié)(后面想辦法再壓縮)。
1個電平存儲的時間使用32bit數(shù)據(jù)來存儲,也就是4字節(jié)存儲。當前默認1條命令為139個PWM,為了預留部分空間,每一條命令分配15024字節(jié)進行存儲。
當前在Data Flash中,開辟了3塊區(qū)域,分別存儲2條溫度指令,以及1條關(guān)機指令。
6、溫度控制邏輯
1、解碼溫度數(shù)據(jù),測試命令能夠成功控制空調(diào);可以成功控制,將數(shù)據(jù)保存到Flash,溫度控制的時候?qū)?shù)據(jù)讀取出來,等待信號控制。
2、大于27攝氏度,打開空調(diào);溫度低于26攝氏度,關(guān)閉空調(diào)。
保存溫度數(shù)據(jù):
選擇保存數(shù)據(jù)的地址:
7、系統(tǒng)構(gòu)成
整個系統(tǒng)為了后期可以方便增加或者減少模塊,所有采用杜邦線連接各個模塊。因為紅外發(fā)射模塊的有效距離小于3米,所以使用了延長線-模塊如前面介紹。
引腳分配:
紅外接收GPIO引腳:P102 -INPUT;
紅外發(fā)射GPIO引腳:P213 -PWM;
固件代碼:
oled12864.zip(60.26 KB)
oled12864 - code.zip(9.43 MB)
-
電路
+關(guān)注
關(guān)注
172文章
5966瀏覽量
172948 -
FlaSh
+關(guān)注
關(guān)注
10文章
1642瀏覽量
148665 -
空調(diào)控制
+關(guān)注
關(guān)注
0文章
18瀏覽量
10970
發(fā)布評論請先 登錄
相關(guān)推薦
基于語音識別的汽車空調(diào)控制系統(tǒng)設計
AMEYA360設計方案丨汽車空調(diào)控制器解決方案
轎車自動空調(diào)控制器的研發(fā)
PLC在中央空調(diào)控制系統(tǒng)中的應用
基于Mega169的空調(diào)控制器的設計
![基于Mega169的<b class='flag-5'>空調(diào)控制</b>器的設計](https://file.elecfans.com/web2/M00/48/CB/pYYBAGKhtCSAWVf3AAAn9uZImdM648.jpg)
基于LonWorks總線的樓宇空調(diào)控制系統(tǒng)設計
![基于LonWorks總線的樓宇<b class='flag-5'>空調(diào)控制</b>系統(tǒng)設計](https://file.elecfans.com/web2/M00/48/FA/pYYBAGKhtDGAC4FSAAAMp7h_iGs361.jpg)
基于PPC8270的BSP開發(fā)過程
![基于PPC8270的BSP<b class='flag-5'>開發(fā)過程</b>](https://file1.elecfans.com//web2/M00/A5/F0/wKgZomUMOueAczU0AAAP1no0-CM921.jpg)
空調(diào)控制器的特點是什么
紅外空調(diào)控制器的工作原理及功能
紅外空調(diào)控制器的原理及控制方式
什么是智能空調(diào)控制器,智能空調(diào)控制器的優(yōu)勢
![什么是智能<b class='flag-5'>空調(diào)控制</b>器,智能<b class='flag-5'>空調(diào)控制</b>器的優(yōu)勢](https://file.elecfans.com//web2/M00/81/25/poYBAGOQVh2AJ6K6AAE6ov9wC7U285.png)
【IoT畢業(yè)設計】STM32開發(fā)板+機智云IoT+實現(xiàn)智能空調(diào)控制
![【IoT畢業(yè)設計】STM32<b class='flag-5'>開發(fā)</b>板+機智云IoT+實現(xiàn)智能<b class='flag-5'>空調(diào)控制</b>](https://file.elecfans.com/web2/M00/3B/FA/poYBAGJPt1WAKrtPAALf6HHNGxY933.png)
評論