Cube添加FreeRTOS 下

Cube添加FreeRTOS 下,第1张

使用百问网的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,按下开发板的按键,

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

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/732187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存