完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、基于STM32+ESP8266+机智云的物联网demo
1、在机智云上创建项目和数据集 ①、进入机智云官网,点击进入开发者模式; ②、进入开发者模式后,注册账号并登录; ③、点击创建新产品; 然后生成代码包: 2、WIFI模块烧写固件 ①、选择固件烧写工具 ②、设置对应的密钥 ③、固件烧写 [tr]WIFI模VCCGNDTXDRXD[/tr]MCU—STM32VCCGNDPB11PB10 USB to TTL模块VCCGNDRXDTXD 如果买了正点原子的开发板和WiFi模块可以使用如下连接方式下载固件 ④、配置好密钥后开始下载密钥 3、移植到MCU上 在STM32上移植 ①、在工程中添加定时器驱动、串口3驱动 ②、定时器驱动代码 定时器源文件 #ifndef __TIMER_H #define __TIMER_H #include “sys.h” #include “stm32f10x_tim.h” void TIM3_Int_Init(u16 arr,u16 psc); #endif 定时器头文件 #include “timer.h” #include “gizwits_product.h” // //定时器 驱动代码 // //通用定时器3中断初始化 //这里时钟选择为APB1的2倍,而APB1为36M //arr:自动重装值。 //psc:时钟预分频数 //这里使用的是定时器3! void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 //定时器TIM3初始化 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 //中断优先级NVIC设置 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx } //定时器3中断服务程序 void TIM3_IRQHandler(void) //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 gizTimerMs(); } } ③、串口3驱动代码 串口3源文件 #ifndef __USART3_H #define __USART3_H #include “sys.h” // //串口3驱动代码 // void usart3_init(u32 bound); //串口3初始化 #endif 串口3头文件 #include “usart3.h” #include “gizwits_product.h” // //串口3驱动代码 // //串口3中断服务函数 void USART3_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据 { res =USART_ReceiveData(USART3); gizPutData(&res, 1);//数据写入到缓冲区 } } //初始化IO 串口3 //pclk1:PCLK1时钟频率(Mhz) //bound:波特率 void usart3_init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //GPIOB时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //串口3时钟使能 USART_DeInit(USART3); //复位串口3 //USART3_TX PB10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB10 //USART3_RX PB11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB11 USART_InitStructure.USART_BaudRate = bound; //波特率一般设置为9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; //字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1; //一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No; //无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式 USART_Init(USART3, &USART_InitStructure); //初始化串口3 USART_Cmd(USART3, ENABLE); //使能串口 //使能接收中断 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); //开启中断 //设置中断优先级 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 } ②、在工程中添加Gizwits、Utils文件并修改 #include 《stdio.h》 #include 《string.h》 #include “gizwits_product.h” //1、第一处添加 #include “usart3.h” //第一处添加 static uint32_t timerMsCount; //2、第二处修改 /** Current datapoint */ extern dataPoint_t currentDataPoint; extern u8 wifi_sta; //第二处修改 //3、将此函数注释 //void userHandle(void) //{ // /* // */ // //} //4、在第267-280行代码处添加四行代码用于循坏发送 for(i=0; i《len; i++) { //USART_SendData(UART, buf[i]);//STM32 test demo //Serial port to achieve the function, the buf[i] sent to the module //此处添加下列两行代码 USART_SendData(USART3,buf[i]); while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET)//循坏发送,直到发送完毕 if(i 》=2 && buf[i] == 0xFF) { //Serial port to achieve the function, the 0x55 sent to the module //USART_SendData(UART, 0x55);//STM32 test demo //此处添加下列两行代码 USART_SendData(USART3, 0x55);//STM32 test demo while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); } } 主函数代码 // // 文 件 名 : main.c // 版 本 号 : v2.0 // 作 者 : Kevin // 生成日期 : 2021-1-3 // 最近修改 : // 功能描述 :演示例程(STM32F103系列) // 修改历史 : // 日 期 : // 作 者 : Kevin //******************************************************************************/ #include “delay.h” #include “sys.h” #include “led.h” #include “lcd_init.h” #include “lcd.h” #include “pic.h” #include “key.h” #include “timer.h” #include “gizwits_product.h” #include “usart3.h” #include “usart.h” /* 用户区当前设备状态结构体*/ dataPoint_t currentDataPoint; //WIFI连接状态 //wifi_sta 0: 断开 // 1: 已连接 u8 wifi_sta=0; //协议初始化 void Gizwits_Init(void) { TIM3_Int_Init(9,7199);//1MS系统定时 usart3_init(9600);//WIFI初始化 memset((uint8_t*)¤tDataPoint, 0, sizeof(dataPoint_t));//设备状态结构体初始化 gizwitsInit();//缓冲区初始化 } int main(void) { // float t=0; // u8 t=0; u8 wifi_con=0;//记录wifi连接状态 1:连接 0:断开 uart_init(115200); //串口初始化为115200 delay_init(); LED_Init();//LED初始化 LCD_Init();//LCD初始化 KEY_Init(); //初始化与按键连接的硬件接口 LED=0; Gizwits_Init(); //协议初始化 要在定义 printf(“--------传感器监测----------rn”); while(1) { if(wifi_con!=wifi_sta) { wifi_con=wifi_sta; wifi_con?printf(“connect”):printf(“close”); //三元运算符如果成立则:打印connect否则:close } if(currentDataPoint.valuedeng == 0) { LED = 1; } else { LED = 0; } gizwitsHandle((dataPoint_t *)¤tDataPoint); //协议处理 key = KEY_Scan(0); if(key==KEY0_PRES)//KEY0按键 { printf(“WIFI进入SOFTAP_MODE连接模式rn”); gizwitsSetMode(WIFI_SOFTAP_MODE);//WIFI_SOFTAP_MODE模式接入可以进这个函数修改模式 } } } 重点说明几处,也是创建项目必不可少的几个地方 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1752 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1611 浏览 1 评论
1052 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1666 浏览 2 评论
1926浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
711浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
560浏览 3评论
583浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-18 13:33 , Processed in 0.591637 second(s), Total 74, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号