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