收藏官网首页
查看: 576|回复: 0

STM32与机智云连接实现步骤与技巧(上篇)

114

主题

123

帖子

5181

积分

论坛元老

Rank: 8Rank: 8

积分
5181
跳转到指定楼层
楼主
 楼主| 发表于 2025-5-22 18:17:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
STM32机智云连接实现步骤与技巧
创建产品

1、访问机智云官网
前往机智云官网(机智云智能物联网操作系统),进入开发者平台。注册并创建个人账号,然后登录平台。




点击“创建产品”并创建新产品


进入到新建产品中,根据自己想要的功能点击去编辑添加数据点(功能定义)


6、添加所需要数据点(添加功能)


本设计设置的数据点如下所示。


优化后的描述如下:

调试设备
返回开发者中心首页,点击“下载中心”。下载并安装APP调试工具。


下载完成后,打开虚拟设备调试界面,返回至该页面。然后在手机端调试APP中扫描二维码,绑定设备并开始进行调试。



机智云固件

刷入机智云固件时,首先在下载中心找到并下载机智云联网固件(Gizwits)。下载完成后,进行解压缩,准备刷入操作。





烧录软件在
固件烧录工具




解压后打开,等待烧录完成。


烧录过程中可能出现的问题
1.需要保证IO0接地,可以用烧录器的GND和其相连
2.把ESP8266的3V3快速断开后再相连,再点击烧录即可其相连
生成Gizwits代码,准备移植STM32中
1.返回机智云官网,生产代码
等待代码生成,下载完成后解压缩:



开始移植到STM32文件中



然后找到自己的32工程,复制到工程中


打开工程配置设备虚拟树


添加对应的文件,

包含相关头文件路径

编写对应的USART代码 ---- 注意波特率必须为9600本设计用的是stm32f103c8t6的串口3

  1. void uart3_init(u32 bound)
  2. {
  3.         //GPIO端口设置
  4.         GPIO_InitTypeDef GPIO_InitStructure;
  5.         USART_InitTypeDef USART_InitStructure;
  6.         
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//时钟GPIOB、USART3
  8.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
  9.         
  10.         //USART3_TX   PB10
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  12.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  13.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  14.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  15.         //USART3_RX          PB11
  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  18.         GPIO_Init(GPIOB, &GPIO_InitStructure);  
  19.         //USART 初始化设置
  20.         USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;
  21.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  22.         USART_InitStructure.USART_StopBits = USART_StopBits_1;
  23.         USART_InitStructure.USART_Parity = USART_Parity_No;
  24.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  25.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  26.         USART_Init(USART3, &USART_InitStructure);
  27.         
  28.         NVIC_InitTypeDef NVIC_InitStruct;
  29.         NVIC_InitStruct.NVIC_IRQChannel = USART3_IRQn;
  30.         NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
  31.         NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 2;
  32.         NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;
  33.         NVIC_Init(&NVIC_InitStruct);
  34.         
  35.         USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启中断
  36.         USART_Cmd(USART3, ENABLE);                    //使能串口
  37. }


  38. void USART3_IRQHandler(void)
  39. {
  40.         
  41.         u8 data = 0;
  42.         if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)//接收中断标志位拉高
  43.         {
  44.                 USART_ClearITPendingBit(USART3,USART_IT_RXNE);
  45.                 data = USART_ReceiveData(USART3);
  46.                 gizPutData(&data,1);      //这段话不要忘记
  47.                
  48.         }
  49. }
  50. AI写代码
复制代码


编写1ms定时器更新中断,作为心跳
  1. #include "timer.h"
  2. #include "gizwits_protocol.h"
  3. #include "gizwits_product.h"
  4. //通用定时器4中断初始化
  5. //这里时钟选择为APB1的2倍,而APB1为36M
  6. //arr:自动重装值。
  7. //psc:时钟预分频数
  8. //这里使用的是定时器4!
  9. void TIM4_Int_Init(void)
  10. {
  11.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  12.         NVIC_InitTypeDef NVIC_InitStructure;

  13.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
  14.         
  15.         //定时器TIM4初始化
  16.         TIM_TimeBaseStructure.TIM_Period = 1000 - 1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值        
  17.         TIM_TimeBaseStructure.TIM_Prescaler =72 - 1; 72Mhz  T=1/f = 1000hz
  18.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
  19.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
  20.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位

  21.         TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); //使能指定的TIM4中断,允许更新中断

  22.         //中断优先级NVIC设置
  23.         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM4中断
  24.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
  25.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
  26.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  27.         NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器


  28.         TIM_Cmd(TIM4, ENABLE);  //使能TIMx                                         
  29. }
  30. //定时器4中断服务程序
  31. void TIM4_IRQHandler(void)   //TIM4中断
  32. {
  33.         if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  //检查TIM4更新中断发生与否
  34.                 {
  35.                         TIM_ClearITPendingBit(TIM4, TIM_IT_Update );
  36.                         gizTimerMs();
  37.                 }
  38. }
  39. AI写代码
复制代码



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

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

快速回复 返回顶部 返回列表
在线咨询