STM32版代码学习笔记一:主框架分析
本帖最后由 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; //´®¿Ú»º³åÇø
uint8_t Message_Buf; //´¦Àí½ÓÊÕµ½Ö¸ÁîµÄ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,这样就实现了双向通信。
框架就分析到这里,下面的笔记再来研究具体的功能.
沙发沙发,楼主顶一下,那代码表示看不懂……多谢楼主解释 爱篮 发表于 2015-8-5 22:48
沙发沙发,楼主顶一下,那代码表示看不懂……多谢楼主解释
我也看不懂,都是猜的:lol 看了 下主代码,有点聊解 今天刚拿到板子,试试
页:
[1]