任务2:灯闪烁
说明: 在FreeRTOS里新建一个任务,让板载的灯1秒钟闪烁一次
任务分析:板载的灯是连接在GPIO2上的,因此只要控制GPIO2没1秒钟切换一次高低电平就可以了
我们在上机课的例程的基础上进行扩展,由于我们用到GPIO所以要把GPIO的驱动复制到程序目录下
打开user_main.c文件,添加头文件
新建一个初始化gpio的函数
添加led任务函数
在主函数中添加新建任务函数
打开虚拟机,切换到程序目录下
编译报错
用vim makefile编辑markfile文件
添加子文件夹
添加生成的文件
重新生成成功
10秒切换一次状态,忘记了vTaskDelay是10ms为单位的,1000就是10S
其他端口的控制:
//led初始化函数
void led_init(void)
{
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); //
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13); //
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14); //
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15); //
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
GPIO_OUTPUT_SET(12, 0);
GPIO_OUTPUT_SET(13, 0);
GPIO_OUTPUT_SET(14, 0);
GPIO_OUTPUT_SET(15, 0);
gpio16_output_conf();
gpio_output_set(1);
}
void ATaskLed(void *pvParameters)
{
int iVariableExample = 0;
for(;;)
{
gpio16_output_set(1);
printf("gpio16 High!");
GPIO_OUTPUT_SET(0, 1);
GPIO_OUTPUT_SET(2, 1);
GPIO_OUTPUT_SET(4, 1);
GPIO_OUTPUT_SET(5, 1);
GPIO_OUTPUT_SET(12, 1);
GPIO_OUTPUT_SET(13, 1);
GPIO_OUTPUT_SET(14, 1);
GPIO_OUTPUT_SET(15, 1);
//gpio_set_high(2);
vTaskDelay(100);
gpio16_output_set(0);
printf("gpio16 Low!");
gpio_output_set(GPIO_ID_PIN(4), 0);
//gpio_set_low(2);
GPIO_OUTPUT_SET(0, 0);
GPIO_OUTPUT_SET(2, 0);
GPIO_OUTPUT_SET(4, 0);
GPIO_OUTPUT_SET(5, 0);
GPIO_OUTPUT_SET(12, 0);
GPIO_OUTPUT_SET(13, 0);
GPIO_OUTPUT_SET(14, 0);
GPIO_OUTPUT_SET(15, 0);
vTaskDelay(100);
}
vTaskDelete(NULL);
}