|
本帖最后由 netlhx 于 2015-8-5 22:47 编辑
想把gokit上面的扩展板插到NUCLEO F411上面,得仔细研究下源代码。
今天只看下主框架,做到对程序主要功能了解的程度,打工MAIN.C文件,首先是一堆变量定义
- UART_HandleTypeDef UART_HandleStruct;
- Pro_Wait_AckTypeDef Wait_AckStruct;
- Device_WirteTypeDef Device_WirteStruct;
- Device_ReadTypeDef Device_ReadStruct;
- Pro_M2W_ReturnInfoTypeDef Pro_M2W_ReturnInfoStruct;
- Pro_CommonCmdTypeDef Pro_CommonCmdStruct;
- Pro_W2D_WifiStatusTypeDef Pro_W2D_WifiStatusStruct;
- Pro_CommonCmdTypeDef Pro_M2WResetCmdStruct;
- Pro_D2W_ConfigWifiTypeDef Pro_D2WConfigCmdStruct;
- Pro_D2W_ReportDevStatusTypeDef Pro_D2W_ReportStatusStruct;
- KEY_StatusTypeDef KEY_Status;
- uint8_t SN;
- uint32_t SystemTimeCount = 0;
- uint32_t ReportTimeCount = 0;
- uint8_t Set_LedStatus = 0;
复制代码
这些变量大部分都是WIFI与设备交换信息用的结构体定义,只是这些变量的名称还不太清楚,下面都是自己猜的,后面再来慢慢验证:
Pro: Product?
Device_WriteXXX: 可写类型外设,电机速度等?
Device_ReadXXX: 只读类型外设,如温、湿度等?
M2W: MCU to WIFI?
D2W:???
W2D:???
不知道谁熟悉这些变量的含义,希望能解释一下哈。
先放一放,看主要功能框架。
- int main(void)
- {
- SystemInit();
- UARTx_Init();
- Printf_SystemRccClocks();
- RTC_Init();
- Hal_Init();
- McuStatusInit();
-
- while(1)
- {
- MessageHandle();
- KEY_Handle();
- IR_Handle();
- DHT11_Read_Data(&Device_ReadStruct.Temperature, &Device_ReadStruct.Humidity);
- ReportDevStatusHandle();
- }
- }
复制代码
从代码看,主框架主要实现如下功能:
- SystemInit()主要完成系统硬件初始化,特别是时钟树的初始化
- UARTx_Init()这个应该是初始化串口,WIFI模块就是通过串口与MCU交换信息的
- RTC_Init() 初始化实时时钟
- Hal_Init() 完成外设扩展板上外设的初始化
- McuStatusInit()这个就是对上面那一堆变量的初始化了
- 接下来是任务处理部分代码,完成消息处理、按键处理等,最后报告设备状态
基本上的功能就是如此。
代码本身是用STD库实现的,也许官方负责这个工程的人也熟悉HAL库的开发,所以添加的一些功能就使用了类似HAL库的风格。这种STD及HAL混用风格的代码看着实在关疼!
上面有个这样的类型定义
- __packed typedef struct
- {
- uint8_t Package_Flag; //ÅжÏÊÇ·ñ½ÓÊÕµ½Ò»¸öÍêÕûµÄ´®¿ÚÊý¾Ý°ü
- uint8_t UART_Flag1;
- uint8_t UART_Flag2;
- uint16_t UART_Count; //´®¿Ú»º³åÇø¼ÆËãÊý¾Ý³¤¶È
- uint8_t UART_Cmd_len; //Ö¸Á¶È
- uint8_t UART_Buf[Max_UartBuf]; //´®¿Ú»º³åÇø
- uint8_t Message_Buf[Max_UartBuf]; //´¦Àí½ÓÊÕµ½Ö¸ÁîµÄBuf
- uint8_t Message_Len; //´¦ÀíÐÅÏ¢³¤¶È
-
- }UART_HandleTypeDef;
复制代码 只是HAL库里也有个这样的定义
- typedef struct
- {
- USART_TypeDef *Instance; /*!< UART registers base address */
-
- UART_InitTypeDef Init; /*!< UART communication parameters */
-
- uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */
-
- uint16_t TxXferSize; /*!< UART Tx Transfer size */
-
- uint16_t TxXferCount; /*!< UART Tx Transfer Counter */
-
- uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */
-
- uint16_t RxXferSize; /*!< UART Rx Transfer size */
-
- uint16_t RxXferCount; /*!< UART Rx Transfer Counter */
-
- DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
-
- DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */
-
- HAL_LockTypeDef Lock; /*!< Locking object */
- __IO HAL_UART_StateTypeDef State; /*!< UART communication state */
-
- __IO uint32_t ErrorCode; /*!< UART Error code */
- }UART_HandleTypeDef;
复制代码
过一段时间后,这种定义还真是头疼,希望新版改进一下吧。STD就不要用HAL风格,HAL也不要用STD风格。
上面是就设备本身的功能来分析。
实际上还有个APP,APP通过网络(路由器或3G/4G网络)将信息发送给透传模块,模块再通过UART与MCU通信。同时MCU定期将设备状态再通过透传模块发送给APP,这样就实现了双向通信。
框架就分析到这里,下面的笔记再来研究具体的功能.
|
|