收藏官网首页
查看: 14042|回复: 4

STM32版代码学习笔记一:主框架分析

4

主题

7

帖子

102

积分

注册会员

Rank: 2

积分
102
跳转到指定楼层
楼主
发表于 2015-8-5 22:43:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
本帖最后由 netlhx 于 2015-8-5 22:47 编辑

想把gokit上面的扩展板插到NUCLEO F411上面,得仔细研究下源代码。

今天只看下主框架,做到对程序主要功能了解的程度,打工MAIN.C文件,首先是一堆变量定义
  1. UART_HandleTypeDef                                         UART_HandleStruct;
  2. Pro_Wait_AckTypeDef                     Wait_AckStruct;
  3. Device_WirteTypeDef                                             Device_WirteStruct;                    
  4. Device_ReadTypeDef                Device_ReadStruct;

  5. Pro_M2W_ReturnInfoTypeDef                                  Pro_M2W_ReturnInfoStruct;
  6. Pro_CommonCmdTypeDef                                       Pro_CommonCmdStruct;
  7. Pro_W2D_WifiStatusTypeDef                      Pro_W2D_WifiStatusStruct;     
  8. Pro_CommonCmdTypeDef                                              Pro_M2WResetCmdStruct;                    
  9. Pro_D2W_ConfigWifiTypeDef               Pro_D2WConfigCmdStruct;                  
  10. Pro_D2W_ReportDevStatusTypeDef           Pro_D2W_ReportStatusStruct;
  11. KEY_StatusTypeDef                                                                 KEY_Status;
  12. uint8_t                                                                                                                 SN;   
  13. uint32_t SystemTimeCount = 0;
  14. uint32_t ReportTimeCount = 0;

  15. uint8_t Set_LedStatus = 0;
复制代码

这些变量大部分都是WIFI与设备交换信息用的结构体定义,只是这些变量的名称还不太清楚,下面都是自己猜的,后面再来慢慢验证:
Pro: Product?
Device_WriteXXX: 可写类型外设,电机速度等?
Device_ReadXXX: 只读类型外设,如温、湿度等?
M2W: MCU to WIFI?
D2W:???
W2D:???

不知道谁熟悉这些变量的含义,希望能解释一下哈。

先放一放,看主要功能框架。


  1. int main(void)
  2. {
  3.         SystemInit();
  4.         UARTx_Init();
  5.         Printf_SystemRccClocks();
  6.         RTC_Init();
  7.         Hal_Init();
  8.         McuStatusInit();
  9.         
  10.         while(1)
  11.         {
  12.                 MessageHandle();
  13.                 KEY_Handle();               
  14.                 IR_Handle();
  15.                 DHT11_Read_Data(&Device_ReadStruct.Temperature, &Device_ReadStruct.Humidity);
  16.                 ReportDevStatusHandle();
  17.         }
  18. }
复制代码

从代码看,主框架主要实现如下功能:

  • SystemInit()主要完成系统硬件初始化,特别是时钟树的初始化
  • UARTx_Init()这个应该是初始化串口,WIFI模块就是通过串口与MCU交换信息的
  • RTC_Init() 初始化实时时钟
  • Hal_Init() 完成外设扩展板上外设的初始化
  • McuStatusInit()这个就是对上面那一堆变量的初始化了
  • 接下来是任务处理部分代码,完成消息处理、按键处理等,最后报告设备状态

基本上的功能就是如此。

代码本身是用STD库实现的,也许官方负责这个工程的人也熟悉HAL库的开发,所以添加的一些功能就使用了类似HAL库的风格。这种STD及HAL混用风格的代码看着实在关疼!

上面有个这样的类型定义
  1. __packed        typedef struct        
  2. {
  3.         uint8_t                                                        Package_Flag;                                     //ÅжÏÊÇ·ñ½ÓÊÕµ½Ò»¸öÍêÕûµÄ´®¿ÚÊý¾Ý°ü         
  4.         uint8_t                                                        UART_Flag1;
  5.         uint8_t                                                        UART_Flag2;
  6.         uint16_t                                                 UART_Count;                                                                //´®¿Ú»º³åÇø¼ÆËãÊý¾Ý³¤¶È        
  7.         uint8_t                                                         UART_Cmd_len;                                                        //Ö¸Á¶È        
  8.         uint8_t                                                 UART_Buf[Max_UartBuf];                 //´®¿Ú»º³åÇø
  9.         uint8_t             Message_Buf[Max_UartBuf]; //´¦Àí½ÓÊÕµ½Ö¸ÁîµÄBuf
  10.         uint8_t             Message_Len;                    //´¦ÀíÐÅÏ¢³¤¶È
  11.         
  12. }UART_HandleTypeDef;

复制代码
只是HAL库里也有个这样的定义


  1. typedef struct
  2. {
  3.   USART_TypeDef                 *Instance;        /*!< UART registers base address        */
  4.   
  5.   UART_InitTypeDef              Init;             /*!< UART communication parameters      */
  6.   
  7.   uint8_t                       *pTxBuffPtr;      /*!< Pointer to UART Tx transfer Buffer */
  8.   
  9.   uint16_t                      TxXferSize;       /*!< UART Tx Transfer size              */
  10.   
  11.   uint16_t                      TxXferCount;      /*!< UART Tx Transfer Counter           */
  12.   
  13.   uint8_t                       *pRxBuffPtr;      /*!< Pointer to UART Rx transfer Buffer */
  14.   
  15.   uint16_t                      RxXferSize;       /*!< UART Rx Transfer size              */
  16.   
  17.   uint16_t                      RxXferCount;      /*!< UART Rx Transfer Counter           */  
  18.   
  19.   DMA_HandleTypeDef             *hdmatx;          /*!< UART Tx DMA Handle parameters      */
  20.    
  21.   DMA_HandleTypeDef             *hdmarx;          /*!< UART Rx DMA Handle parameters      */
  22.   
  23.   HAL_LockTypeDef               Lock;             /*!< Locking object                     */

  24.   __IO HAL_UART_StateTypeDef    State;            /*!< UART communication state           */
  25.   
  26.   __IO uint32_t                 ErrorCode;        /*!< UART Error code                    */

  27. }UART_HandleTypeDef;
复制代码


过一段时间后,这种定义还真是头疼,希望新版改进一下吧。STD就不要用HAL风格,HAL也不要用STD风格。

上面是就设备本身的功能来分析。

实际上还有个APP,APP通过网络(路由器或3G/4G网络)将信息发送给透传模块,模块再通过UART与MCU通信。同时MCU定期将设备状态再通过透传模块发送给APP,这样就实现了双向通信。

框架就分析到这里,下面的笔记再来研究具体的功能.


1

主题

2

帖子

33

积分

新手上路

Rank: 1

积分
33
沙发
发表于 2015-8-5 22:48:50 | 只看该作者
沙发沙发,楼主顶一下,那代码表示看不懂……多谢楼主解释

4

主题

7

帖子

102

积分

注册会员

Rank: 2

积分
102
板凳
 楼主| 发表于 2015-8-5 22:52:02 | 只看该作者
爱篮 发表于 2015-8-5 22:48
沙发沙发,楼主顶一下,那代码表示看不懂……多谢楼主解释

我也看不懂,都是猜的

4

主题

16

帖子

78

积分

注册会员

Rank: 2

积分
78
地板
发表于 2015-8-6 21:43:57 | 只看该作者
看了 下主代码,有点聊解

3

主题

24

帖子

136

积分

注册会员

Rank: 2

积分
136
5#
发表于 2015-8-8 19:39:31 | 只看该作者
免费使用STM32、APP自动代码生成工具
今天刚拿到板子,试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表