FreeRTOS LED闪烁例子
发表于|更新于|嵌入式
|浏览量:
这个例子演示了基于 FreeRTOS 的闪灯程序,这里给出主要代码块。
main.c
1 | void vApplicationTickHook(void) |
led.c
1 | /// @brief led FreeRTOS 任务函数 |
文章作者: 小土坡
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 小土坡!
相关推荐
2024-12-15
AT32 单片机简单按键程序
今天写了一下简单的按键程序,单片机是 AT32F437ZGT7 ,按键消抖用的是阻塞延时函数。下面列出代码: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152/* add user code begin Header *//**...
2024-03-12
AT32 配置nvic优先级组
在学习 At32 的过程中遇到了nvic优先级组,在此做个记录方便以后查阅。at32的固件库中 NVIC 相关的 API 在 at32f413_misc.c 文件中。 nvic_priority_group_typenvic_priority_group_type 枚举类型,定义了5中分组类型,定义如下: 1234567891011/** * @brief nvic interrupt priority group */typedef enum{ NVIC_PRIORITY_GROUP_0 = ((uint32_t)0x7), /*!< 0 bits for preemption priority, 4 bits for subpriority */ NVIC_PRIORITY_GROUP_1 = ((uint32_t)0x6), /*!< 1 bits for preemption priority, 3 bits for subpriority */ ...
2024-03-11
AT32 打印输出 SystemCoreClock 的值
这里简单演示下打印输出 SystemCoreClock 的值,我用的 MCU 为 at32f413,最大频率为 200MHz。 我的配置: 配置代码时钟的配置可以用 AT32 官方提供的时钟配置工具(AT32_New_Clock_Configuration.exe)来生成。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950void system_clock_config(void){ /* reset crm */ crm_reset(); // 使用外部 8MHz 晶振 crm_clock_source_enable(CRM_CLOCK_SOURCE_HEXT, TRUE); /* wait till hext is ready */ while(crm_hext_stable_wait() == ERROR) { } /* config pll clock resource */ ...
2024-12-18
AT32 按键例子 - 外部中断模式
今天给大家分享一个基于 AT32 单片机的中断按键例子,这个例子通过一个按键控制一个 LED 的亮灭(中断-上升沿触发模式)。 原理图: 我们用的是 FP11_SW1 ,注意要是能内部上拉电阻,这里我用了 AT32 Work Bench 可视化配置工具。 中断配置: 配置为中断模式并且为上升沿触发,也就是我们在按下按键并且松开时才会触发中断。因为使能了内部上拉电阻,默认为高电平,所以才会在按键松开时触发中断。 我们需要勾选 EXINT15_10_IRQ,这样会在 at32f435_437_int.c 文件中生产 EXINT15_10_IRQHandler() 中断函数。 主循环代码: 123456789// main.cconfirm_state led2_flag = TRUE; // 全局变量while(1){/* add user code begin 3 */ gpio_bits_write(LED2_GPIO_PORT, LED2_PIN, led2_flag);/* add user code end 3...
2024-12-19
AT32 滴答定时器 LED 闪烁
在此分享一下 AT32 Work Bench 创建的滴答定时器 LED 闪灯程序,程序只用到了一个 LED,下面是具体的内容。 配置 system 要把时基源参数中的延时模式选择为中断,否则的话不会启动中断函数。 123456789101112131415161718192021222324252627282930313233343536373839404142434445// main.cint main(void){ /* add user code begin 1 */ /* add user code end 1 */ /* system clock config. */ wk_system_clock_config(); /* config periph clock. */ wk_periph_clock_config(); /* nvic config. */ wk_nvic_config(); /* timebase config. */ wk_timebase_init(); /* init gpio function. */ ...
2024-03-07
FreeRTOS 按键程序代码笔记
在这里分享一个我写到基于 FreeRTOS 的按键程序,只是自己的一个思路,欢迎讨论。 数据结构定义123456789101112131415161718192021222324252627282930313233343536373839404142434445464748//// File: xtp_defines.h//#ifndef __XTP_DEFINES_H#define __XTP_DEFINES_H#include "at32f413.h"#include <stdbool.h>#include <stdio.h>#define USE_FREERTOS (1) // 1:使用 FreeRTOS 0:不使用 FreeRTOS#define AT32#define LED#if USE_FREERTOS#include "FreeRTOS.h"#include "task.h"#endif#ifdef LED#include...
2024-02-22
FreeRTOS 创建任务
1234567891011121314151617#include "FreeRTOS.h"#include "task.h"#define USER_LED_TASK_PRIO 2 /* 定义任务优先级,数字越大优先级越高 */#define USER_LED_TASK_STACK_SIZE 120 /* 定义任务堆栈大小,单位为:字 */TaskHandle_t user_led_handle; /* 定义任务句柄 */void xtp_create_task(void){ xTaskCreate( (TaskFunction_t)led_task, (const char *)"led_task", (uint16_t)USER_LED_TASK_STACK_SIZE, (void *)NULL, (UBaseType_t)USER_LED_TASK_PRIO, ...
2024-02-23
FreeRTOS 延时函数
vTaskDelay()任务延时函数,把当前任务从运行态(就绪列表),移到延时列表。 参数: xTicksToDelay > 延时的时间长度,单位是系统时钟节拍周期。 如果调用vTaskDelay()函数的任务在执行过程中被更高优先级的任务或者中断所打断,那么调用vTaskDelay()函数的任务将会受到影响,此时将不能保持一个固定的时间间隔运行。 使用例子12vTaskDelay(500/portTICK_PERIOD_MS);vTaskDelay(200); 函数定义12345678910111213141516171819202122232425262728293031323334353637383940414243#if ( INCLUDE_vTaskDelay == 1 ) void vTaskDelay( const TickType_t xTicksToDelay ) { BaseType_t xAlreadyYielded = pdFALSE; /* A delay time of zero just...
2024-03-07
FreeRTOS钩子函数
FreeRTOS 中的钩子函数和中断的回调函数很像,钩子函数的名字是固定的,在特定事件下会自动执行响应名字的钩子函数,并且钩子函数是可剪裁的,在 FreeRTOSConfig.h中配置是否启用特定的钩子函数。 vApplicationTickHook节拍中断可以选择是否回调一个钩子函数,这个钩子函数允许实现一些周期性的功能。 使用节拍中断钩子函数,需要将 configUSE_TICK_HOOK设置为1,同时钩子函数申明为如下原型: void vApplicationTickHook( void ) 这个钩子函数必须很短且占用堆栈空间很少,因为这是在中断中调用的函数,同时,只能调用以FromISR结尾的API函数。
2024-02-22
FreeRTOS 任务挂起与任务恢复
FreeRTOS 的任务有几种状态,并且这几种状态可以相互转换,下面是转换图: 任务的4个状态: 运行态 就绪态,指准备好了,可以随时运行 阻塞态 挂起态 运行态当任务实际执行时,它被称为处于运行状态。 任务当前正在使用处理器。 如果运行 RTOS 的处理器只有一个内核, 那么在任何给定时间内都只能有一个任务处于运行状态。 就绪态准备就绪任务指那些能够执行(它们不处于阻塞或挂起状态), 但目前没有执行的任务, 因为同等或更高优先级的不同任务已经处于运行状态。 阻塞态如果任务当前正在等待时间或外部事件,则该任务被认为处于阻塞状态。 例如,如果一个任务调用vTaskDelay(),它将被阻塞(被置于阻塞状态), 直到延迟结束-一个时间事件。 任务也可以通过阻塞来等待队列、信号量、事件组、通知或信号量 事件。 处于阻塞状态的任务通常有一个”超时”期, 超时后任务将被超时,并被解除阻塞, 即使该任务所等待的事件没有发生。 阻塞状态下的任务不使用任何处理时间,不能 被选择进入运行状态。 挂起态 Blocked与阻塞状态下的任务一样, 挂起状态下的任务不能...
2024-03-11
FreeRTOS 配置文件笔记
FreeRTOSConfig.h 是 FreeRTOS 中的配置文件,通过配置该文件可以裁剪使用哪些 FreeRTOS 功能。 网站的 FreeRTOSConfig.h 配置文件很大有很多配置选项,但是有很多选项是有默认值的,我们只需配置我们使用的选项即可。 下面是一份...
公告
This is my Blog