目錄
一、延時函式os_delay_us
二、新建專案
三、新建檔案
1.bsp_delay.c
2.bsp_delay.h
四、ICACHE_FLASH_ATTR,system_soft_wdt_feed()決議
五、user_main.c
六、程式運行結果
一、延時函式os_delay_us

二、新建專案
復制(<esp8266 iot 開發環境搭建(AiThinkerIDE_V1.5.2)>https://blog.csdn.net/qq_27558597/article/details/117656516?spm=1001.2014.3001.5502)章節的SDK模板,專案名為<002_Delay>,匯入IDE,如下:

打開driver檔案夾,洗掉暫時用不到的.c檔案,以及include下的driver的對應的.h檔案,程序如下:


注意不要把Makefile洗掉了,
三、新建檔案
1.bsp_delay.c



修改bsp_delay.c內容如下:
/*
*********************************************************************************************************
*
* 程式名稱: 系統延時模塊
* 檔案名稱: bsp_delay.c
* 版 本: v1.0.0
* 編 寫: 風巽云科技 lijiangmo
* 說 明: 使用os_delay_us重新封裝
*
* 版本記錄:
* v1.0.0: 2021年6月9日,初版
*
* Copyright (C), 2021-2031, 深圳市風巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#include "osapi.h"
#include "user_interface.h"
/*
*********************************************************************************************************
* 函 數 bsp_DelayUsUs
* 功能說明: us延時
* 形 參: ulNus: 延時值,注意最大延時值為 2^24 / fUsValueCount)
* 返 回 值: 無
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_DelayUs(uint32_t ulNus)
{
os_delay_us(ulNus);
}
/*
*********************************************************************************************************
* 函 數 bsp_DelayMsMs
* 功能說明: ms延時
* 形 參: ulNms: 毫秒延時值
* 返 回 值: 無
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_DelayMs(uint32_t ulNms)
{
uint32_t ulStatus;
while (ulNms)
{
/* 延時1000us */
os_delay_us(1000);
/* 清零看門狗計數器 */
system_soft_wdt_feed();
ulNms--;
}
}
/********************************************* End of file **********************************************/
2.bsp_delay.h



修改bsp_delay.h內容如下:
/*
*********************************************************************************************************
*
* 程式名稱: 系統延時模塊
* 檔案名稱: bsp_delay.h
* 版 本: v1.0.0
* 編 寫: 風巽云科技 lijiangmo
* 日 期: 2021年6月9日
*
* Copyright (C), 2021-2031, 深圳市風巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#ifndef __BSP_DELAY_H
#define __BSP_DELAY_H
/* 供外部呼叫函式 */
void ICACHE_FLASH_ATTR bsp_DelayUs(uint32_t ulNus);
void ICACHE_FLASH_ATTR bsp_DelayMs(uint32_t ulNms);
#endif
/********************************************* End of file **********************************************/
四、ICACHE_FLASH_ATTR,system_soft_wdt_feed()決議

五、user_main.c
/*
* ESPRESSIF MIT License
*
* Copyright (c) 2016 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
*
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
* it is free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
/*
*********************************************************************************************************
*
* 程式名稱: 軟體延時
* 檔案名稱: user_main.c
* MCU型號 : ESP8266 FLASH:4MB RAM: 160KB(64KB為iRAM,96KB為dRAM)
* 運行平臺: ESP8266 IoT開發板
* 版 本: v1.0.0
* 編 寫: 風巽云科技 lijiangmo
* 說 明: 軟體延時
*
* 版本記錄:
* v1.0.0: 2021年6月9日,初版
*
* Copyright (C), 2021-2031, 深圳市風巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#include "ets_sys.h"
#include "osapi.h"
#include "mem.h"
#include "user_interface.h"
#include "sntp.h"
#include "smartconfig.h"
#include "espconn.h"
#include "driver/uart.h"
#include "driver/bsp_delay.h"
/* FLASH磁區表 */
#if ((SPI_FLASH_SIZE_MAP == 0) || (SPI_FLASH_SIZE_MAP == 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 2)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0xfb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0xfc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0xfd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 3)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 4)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 5)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#elif (SPI_FLASH_SIZE_MAP == 6)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#else
#error "The flash map is not supported"
#endif
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM SYSTEM_PARTITION_CUSTOMER_BEGIN
static const partition_item_t at_partition_table[] = {
{SYSTEM_PARTITION_BOOTLOADER, 0x0, 0x1000},
{SYSTEM_PARTITION_OTA_1, 0x1000, SYSTEM_PARTITION_OTA_SIZE},
{SYSTEM_PARTITION_OTA_2, SYSTEM_PARTITION_OTA_2_ADDR, SYSTEM_PARTITION_OTA_SIZE},
{SYSTEM_PARTITION_RF_CAL, SYSTEM_PARTITION_RF_CAL_ADDR, 0x1000},
{SYSTEM_PARTITION_PHY_DATA, SYSTEM_PARTITION_PHY_DATA_ADDR, 0x1000},
{SYSTEM_PARTITION_SYSTEM_PARAMETER, SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 0x3000},
{SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR, 0x1000},
};
/*
*********************************************************************************************************
* 函 數 名: user_pre_init
* 功能說明: 注冊磁區表
* 形 參: 無
* 返 回 值: 無
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR user_pre_init(void)
{
os_printf("->SPI_FLASH_SIZE_MAP = %d\r\n", SPI_FLASH_SIZE_MAP);
if (!system_partition_table_regist(at_partition_table, sizeof(at_partition_table) / sizeof(at_partition_table[0]), SPI_FLASH_SIZE_MAP))
{
os_printf("->system_partition_table_regist fail\r\n");
while (1)
{
}
}
os_printf("->system_partition_table_regist success\r\n");
}
/*
*********************************************************************************************************
* 函 數 名: PrintfSystempInfo
* 功能說明: 列印例程名稱和例程發布日期
* 形 參: 無
* 返 回 值: 無
*********************************************************************************************************
*/
static void ICACHE_FLASH_ATTR PrintfSystempInfo(void)
{
os_printf("\r\n\r\n");
os_printf("-------------------------------------------------------------\r\n");
os_printf("->ESP8266 IoT\r\n");
/* SDK版本 */
os_printf("->SDK: %s\r\n", system_get_sdk_version());
/* 編譯時間 */
os_printf("->Build: %s %s\r\n", __DATE__, __TIME__);
/* 芯片ID */
os_printf("->CPU ID: 0x%X\r\n", system_get_chip_id());
/* CPU時鐘 */
os_printf("->CPU Freq: %dMHz\r\n", system_get_cpu_freq());
/* FLASH ID */
os_printf("->FLASH ID: 0x%X\r\n", spi_flash_get_id());
/* 查詢系統剩余可用heap區空間 */
os_printf("->Heap Size: %dByte %dKB\r\n", system_get_free_heap_size(), system_get_free_heap_size() / 1024);
/* 列印系統記憶體空間分配,列印資訊包括 data/rodata/bss/heap */
system_print_meminfo();
os_printf("-------------------------------------------------------------\r\n\r\n");
}
/*
*********************************************************************************************************
* 函 數 名: user_init
* 功能說明: 用戶應用初始化
* 形 參: 無
* 返 回 值: 無
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR user_init(void)
{
partition_item_t partition_item;
uint8_t ucTimeCnt = 0;
if (!system_partition_get_item(SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, &partition_item))
{
os_printf("Get partition information fail\r\n");
}
/* 硬體初始化 */
//system_update_cpu_freq(SYS_CPU_80MHZ); /* CPU頻率80MHz-默認 */
//UART_SetPrintPort(0); /* 系統Debug資訊從串口0輸出-默認 */
//uart_init(BIT_RATE_74880, BIT_RATE_74880); /* 初始化波特率-默認 */
bsp_DelayUs(1000);
/* 串口列印系統資訊 */
PrintfSystempInfo();
while(1)
{
ucTimeCnt++;
os_printf("ucTimeCnt = %d\r\n", ucTimeCnt);
bsp_DelayMs(200);
}
}
/********************************************* End of file **********************************************/
注:源檔案修改后要點擊保存,編譯器編譯時是以保存檔案為準,
專案名上右鍵選擇Properties配置工程,選擇C/C++ Build->Build command中添加編譯規則(make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=4),可以根據實際情況來更改規則,點擊OK退出,

專案名上右鍵清除專案,編譯專案,如下:

下載程式,如果不清楚怎么下載程式請查看<esp8266 iot 程式下載>https://blog.csdn.net/qq_27558597/article/details/117666184?spm=1001.2014.3001.5502
六、程式運行結果
打開串口除錯助手,波特率設定為74880bps(esp8266默認波特率)

全部內容如下:
ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 25964, room 16
tail 12
chksum 0xec
ho 0 tail 12 room 4
load 0x3ffe8000, len 1272, room 12
tail 12
chksum 0x76
ho 0 tail 12 room 4
load 0x3ffe8500, len 1688, room 12
tail 12
chksum 0xc2
csum 0xc2
->SPI_FLASH_SIZE_MAP = 4
->system_partition_table_regist success
V2
Mo
�rf cal sector: 1019
freq trace enable 0
rf[112] : 00
rf[113] : 00
rf[114] : 01
SDK ver: 3.0.4(9532ceb) compiled @ May 22 2020 16:26:04
phy ver: 1156_0, pp ver: 10.2
-------------------------------------------------------------
->ESP8266 IoT
->SDK: 3.0.4(9532ceb)
->Build: Jun 9 2021 09:36:01
->CPU ID: 0x5D1487
->CPU Freq: 80MHz
->FLASH ID: 0x164020
->Heap Size: 53120Byte 51KB
data : 0x3ffe8000 ~ 0x3ffe84f6, len: 1270
rodata: 0x3ffe8500 ~ 0x3ffe8b98, len: 1688
bss : 0x3ffe8b98 ~ 0x3ffeef48, len: 25520
heap : 0x3ffeef48 ~ 0x3fffc000, len: 53432
-------------------------------------------------------------
ucTimeCnt = 1
ucTimeCnt = 2
ucTimeCnt = 3
ucTimeCnt = 4
ucTimeCnt = 5
ucTimeCnt = 6
ucTimeCnt = 7
ucTimeCnt = 8
ucTimeCnt = 9
ucTimeCnt = 10
ucTimeCnt = 11
ucTimeCnt = 12
可以看到,程式間隔200ms列印出計數值,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286685.html
標籤:其他
上一篇:美化版swagger
