Cube添加FreeRTOS 下

使用百问网的STM32F103MINI开发板完成下面实验。

1、编写添加的任务函数。

void StartMyTask(void *argument)
{
	uint8_t rx_data[200] = {0};   
	  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	 //按键按下
	 if (Key_GetFlag()) 
	 {
		ESP8266_Send_UDP("{\"data\":\"doorbell\",\"status\":\"1\"}");
	 }
	 
	 //收到UDP数据
	 if (USART2_Receive(rx_data))
	 {
		 //printf("%s\r\n", rx_data);
		 if (strstr((char *)rx_data, "\"dev\":\"led\",\"status\":\"0\"")) 
		 {
			printf("led off\r\n");
			HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
		    USART2_ClearBuf(); 
			memset(rx_data, 0, 200);
		 }
		 else if (strstr((char *)rx_data, "\"dev\":\"led\",\"status\":\"1\""))
		 {
			printf("led on\r\n");
			HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);
			USART2_ClearBuf(); 
			memset(rx_data, 0, 200);			 
		 }
	 }
	  osDelay(1);
  }
}

2、主函数中发送AT指令。

①uint8_t wifi_data[200] = {0};     //定义数组,初始化为0

②Key_Update_WIFI((char *)wifi_data, 500);    //更新WIFI和密码的函数

这个函数有默认的WIFI和密码,按键按下会更新WIFI和密码,

通过strcat()连接字符串,并通过memcpy()拷贝字符串。

③ESP8266_SendCommand("AT+RST", "OK", 500);    //复位WIFI模块

④ESP8266_SendCommand("AT+CWMODE=1", "OK", 500);    //设置模式

⑤ESP8266_SendCommand((char *)wifi_data, "OK", 5000);    //连接WIFI

⑥ESP8266_SendCommand

("AT+CIPSTART=\"UDP\",\"192.168.50.230\",9999,9999,2", "OK", 500);

创建UDP连接

⑦ESP8266_GetIP();    //获取IP地址

⑧操作系统内核初始化、FreeRTOS初始化、操作系统内核启动。

osKernelInitialize();

MX_FREERTOS_Init()

osKernelStart();

3、FreeRTOS的函数。

①创建一个结构体,使用其可以创建对象,对象用于函数的参数。

typedef    struct

{

        const    char    *name;    //函数名称

        uint32_t    attr_bits;    //属性位

        void    *cb_mem;    //控制块内存指针

        uint32_t    cb_size;    //控制块大小

        void    *stack_mem;    //栈内存指针

        uint32_t    stack_size;    //栈大小

        osPriority_t    priority;    //优先级

        TZ_ModuleID_t    tz_module;    //信任块标识

        uint32_t    reserved;    //保留

}    osThreadAttr_t;

const    osThreadAttr_t    MyTask_attributes =

        {

                .name = "MyTask";

                .stack_size = 256 * 4;

                .priority = (osPriority_t) osPriorityLow,

        };

osThreadID_t    MyTaskHandle;    //任务句柄

extern    void    StartMyTask(void* argument);    ///函数声明

void    MX_FREERTOS_Init(void)

{

        MyTaskHandle = osThreadNew(StartMyTask, NULL, &MyTask_attributes);

        ...

}

4、实验结果。

①下载程序,通过串口可以打印过程信息。

 ②通过手机连接电脑的热点。110    12345678

③微信小程序,绑定IP,912.168.137.49。

④点台灯图表,可以控制开发板的LED,按下开发板的按键,

可以看到手机微信小程序的门铃图表变红。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值