日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

STM32F103+SIM800C移植示例

本文介紹按照MCU+支持TCP的模組集成過程,將使用C Link SDK的設備移植到STM32F103,并結合廣域網SIM800C連接到阿里云物聯網平臺。本示例中SIM800C模組支持TCP能力,STM32F103上集成了SDK并直接基于MQTT TOPIC的方式與阿里云物聯網平臺實現數據收發。

背景信息

MCU+支持TCP的模組集成過程,請參見MCU+支持TCP的模組。

用戶也可參考本移植方案,將ST其他類型的芯片實現快速連接阿里云物聯網平臺。

芯片

開發板

參數

STM32F103RBT6

NUCLEO-F103RB

32bits, M3 72Mhz, 128KB-Flash 20KB-SRAM

SIM800C

SIM800C開發板

環境搭建

重要

本節僅供參考使用,若用戶在環境搭建中碰到問題,請聯系開發板供貨商解決問題之后再進行SDK的移植。

STM32F103

  • 搭建目標:

    MCU的兩個串口(作為調試串口和與模組通信的AT串口)可以正常收發。

  • 開發工具:

    ARM? Keil?IAR?。

  • 硬件連接:

    • MCU的AT串口通過Arduino? Uno或ST morpho接口外接模組,示意圖如下(通過TX/RX/GND連接外掛模組)。

    • ST開發板:ST-LINK驅動。

    • 圖示:

  • 軟件環境

    1. 使用ST-cubemx新建Project,然后在Board Seletor選擇NUCLEO-F103RB開發板并雙擊,最后添加合適的串口作為MCU與模組通信的AT口,如下圖USART1所示。

    2. Configuration中選擇USARTx,并將USART1(作為AT口)的interrupt置為enable,單擊Apply/Ok,然后單擊CubemxProject選項中的Generate Code,設置對應的選項。

      其中Toolchain/IDE可以選擇ARM? Keil?IAR?,Heap/Stack size按需進行配置,單擊OK后會自動生成代碼和工程。

    3. 配置ToolChain/IDE,如下圖所示。

    重要

    針對不一樣的應用場景,需根據實際情況合理修改heap和stack的大小(如上圖中圈選位置),本示例的測試中設置**4k(0x1000)Heap2.5K(0xA00)**Stack可以正常工作。

  • 驗證

    根據上述軟件環境配置生成對應的Keil/IAR工程,增加簡單的代碼,自行驗證串口輸入輸出是否OK。

SIM800

請根據廠商提供的應用手冊自行驗證SIM800通信模組是否工作正常。

本示例調試使用的是開發板而不是常見的模組,請參考上文硬件連接中的示例圖與MCU的串口(TX--RX, RX--TX, GND--GND)進行硬件連接。

開發板上電后按壓PWRKEY按鍵(大于1秒),等待STATUSNETLIGHT兩個LED燈陸續點亮,其中NETLIGHT LED會以2HZ進行閃爍,此時SIM800C模組工作正常。

配置SDK

  • 配置命令

    • Windows運行 config.bat

    • Linux運行 make menuconfig

  • 配置步驟

    如下圖所示:

    image

    在本示例中使能了下面的選項:

    • PLATFORM_HAS_STDINT

    • PLATFORM_HAS_DYNMEM

    • FEATURE_MQTT_COMM_ENABLED

      • FEATURE_MQTT_DEFAULT_IMPL

      • FEATURE_MQTT_DIRECT

    • FEATURE_ATM_ENABLED

      • FEATURE_AT_TCP_ENABLED

      • FEATURE_AT_PARSER_ENABLED

        • FEATURE_AT_TCP_HAL_SIM800

說明

上面選擇了FEATURE_AT_TCP_HAL_SIM800,因此SDK將會生成驅動模組SIM800C相關的AT指令代碼。

抽取

  • 抽取命令

    • Window操作系統:運行extract.bat。

    • Linux操作系統:運行extract.sh。

  • 抽取步驟

    執行抽取命令后生成的代碼路徑在output/eng,需要用戶實現位于文件output/eng/wrappers/wrapper.c中的HAL對接函數。

集成步驟

  • 將抽取生成的output/eng代碼atm dev_sign infra mqtt wrappers目錄拷貝到上述已生成的Keil/IAR開發環境中,拷貝或使用examples下的mqtt_example_at.c作為示例,并將mqtt_example_at.c中的main函數名更改為mqtt_example以解決編譯沖突問題。

  • Src/main.c中調用mqtt_example_at.cmqtt_example函數進行示例驗證,更多其他細節請參見MCU+支持TCP的模組中的相關章節。

    /* add mqtt example in this file Src/main.c */
    int main(void)
    {
     ......
     ......
     /* Initialize all configured peripherals */
     MX_GPIO_Init();
     MX_USART2_UART_Init();
     MX_USART1_UART_Init();
     .......
     mqtt_example(); /* add mqtt_example here*/
    }
                

  • 針對不一樣的應用場景,需根據實際情況合理修改heap和stack的大小,本次組合設置4k(0x1000)heap2.5K(0xA00)的stack,修改方法如下:

    • Keil中MDK-ARM/startup_xx.s

    • IAR中EWARM/xx_flash.icf

  • 用戶需要實現wrapper.c中的HAL函數:

    • 本例中因為選擇MCU上不運行OS,因此與系統相關的HAL函數實現可以參考文件wrappers\os\nos\HAL_Nos.c中的函數實現。

    • 對于HAL_GetProductKey 、HAL_GetDeviceName 、HAL_GetDeviceSecret需要用戶返回用戶自己設備的相應身份信息。

    • 對于HAL_AT_Uart_Init、HAL_AT_Uart_DeinitHAL_AT_Uart_Recv、HAL_AT_Uart_Send需要用戶去進行相關串口初始化以及數據收發。

    • wrapper.c參考STM32上無OS。

    • wrapper.c參考STM32上運行FreeRTOS。

IDE配置

Keil、IAR中添加SDK相關的源碼文件,修改頭文件路徑配置。

Keil配置

按下圖依次創建新的Group并修改為linkkit,手動添加源文件(*.c)并設置正確的頭文件路徑如下。

# 設置頭文件路徑,請以實際路徑為準
;../Src/linkkit/atm;../Src/linkkit/dev_sign;../Src/linkkit/infra;../Src/linkkit/mqtt;../Src/linkkit/wrappers
            

編譯、燒錄流程如下:

  1. 在Keil工程下添加Group:

  2. 在Keil工程下添加.c文件:

  3. 設置頭文件路徑:

IAR配置

類似步驟,依次選擇Project > Add Group,輸入linkkit,創建新的Group之后將Src\linkkit里所有子目錄下的.c文件添加進去,最后選擇Project > options,添加以下依賴的頭文件路徑。

# 設置頭文件路徑,請以實際路徑為準
$PROJ_DIR$/../Src/linkkit/atm
$PROJ_DIR$/../Src/linkkit/dev_sign
$PROJ_DIR$/../Src/linkkit/infra
$PROJ_DIR$/../Src/linkkit/mqtt
$PROJ_DIR$/../Src/linkkit/wrappers
            

編譯、燒錄流程如下:

  1. 在IAR工程下添加.c文件:

  2. 在IAR工程下設置頭文件路徑:

  3. 完成編譯:

結果

MCU側Log:

[10:44:17.491]收←◆sim800_uart_selfadaption 283 failed rsp OK
 retry count 1
[10:44:17.526]收←◆signal quality is 
+CSQ: 31,0
OK
network registration is 
+CREG: 0,1
OK
gprs attach check 
+CGATT: 1
OK
[10:44:18.809]收←◆mqtt example
MQTT init success!
establish tcp connection with server(host='a1A******rT.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[1883])
[10:44:20.000]收←◆success to establish tcp, fd=0
[10:44:21.576]收←◆mqtt connect success!
devinfo report
devinfo report topic: /sys/a1A******rT/test_device/thing/deviceinfo/update
devinfo report data: {"id":"0","version":"1.0","params":[{"attrKey":"SYS_LP_SDK_VERSION","attrValue":"3.0.0","domain":"SYSTEM"},{"attrKey":"SYS_SDK_LANGUAGE","attrValue":"C","domain":"SYSTEM"}],"method":"thing.deviceinfo.update"}
[10:44:22.738]收←◆cmd AT+CIPSEND=0,267 rsp  retry 1 at HAL_AT_CONN_Send 858 fail 
[10:44:22.820]收←◆devinfo report succeed
firmware version report start in MQTT
firmware report topic: /ota/device/inform/a1A******rT/test_device
firmware report data: {"id":"1","params":{"version":"app-1.0.0-20190118.1000"}}
[10:44:23.547]收←◆firmware version report finished, iotx_publish() = 2
PERFORM subscribe to '/a1A******rT/test_device/get' (msgId=3)
        Packet Ident : 00000003
               Topic : /a1A******rT/test_device/get
                 QoS : 0
       Packet Length : 35
[10:44:23.861]收←◆mqtt subscribe packet sent,topic = /a1A******rT/test_device/get!
[10:44:24.442]收←◆PUBACK
msg->event_type : 9
PUBACK
msg->event_type : 9
PUBACK
msg->event_type : 9
SUBACK
        Return Value : 1
           Packet ID : 3
               Count : 1
     Granted QoS[00] : 1
packet_id = 3, event_type=3
msg->event_type : 3
[10:44:25.511]收←◆PUBLISH
        Packet Ident : 00000000
        Topic Length : 28
          Topic Name : /a1A******rT/test_device/get
    Payload Len/Room : 11 / 992
      Receive Buflen : 1024
delivering msg ...
topic be matched
Message Arrived: 
Topic  : /a1A******rT/test_device/get
Payload: hello,world
[10:44:46.408]收←◆PUBLISH
        Packet Ident : 00000000
        Topic Length : 28
          Topic Name : /a1A******rT/test_device/get
    Payload Len/Room : 11 / 992
      Receive Buflen : 1024
delivering msg ...
topic be matched
Message Arrived: 
Topic  : /a1A******rT/test_device/get
Payload: hello,world
[10:45:07.348]收←◆PUBLISH
        Packet Ident : 00000000
        Topic Length : 28
          Topic Name : /a1A******rT/test_device/get
    Payload Len/Room : 11 / 992
      Receive Buflen : 1024
delivering msg ...
topic be matched
Message Arrived: 
Topic  : /a1A******rT/test_device/get
Payload: hello,world
[10:45:22.414]收←◆len = MQTTSerialize_pingreq() = 2
[10:45:23.241]收←◆send MQTT ping...
[10:45:24.246]收←◆receive ping response!
[10:45:29.128]收←◆PUBLISH
        Packet Ident : 00000000
        Topic Length : 28
          Topic Name : /a1A******rT/test_device/get
    Payload Len/Room : 11 / 992
      Receive Buflen : 1024
delivering msg ...
topic be matched
Message Arrived: 
Topic  : /a1A******rT/test_device/get
Payload: hello,world