5、3个LED任务闪烁

1、代码例程:

  1 /*****************************************************************************************************************************
  2 *
  3 *  文件名称:main.c
  4 *  文件功能:主函数
  5 *  文件说明:无
  6 *
  7 *****************************************************************************************************************************/
  8 /**********************************************************
  9 *
 10 *  头文件声明
 11 *
 12 **********************************************************/
 13
 14 #include "pbdata.h"
 15
 16
 17
 18
 19
 20 /**********************************************************
 21 *
 22 *  任务相关设置
 23 *
 24 **********************************************************/
 25 /*开始任务*/
 26     #define  START_TASK_PRIO   9  //设置任务优先级
 27     #define  START_STK_SIZE    64  //空间大小=64*4(字节)
 28     OS_STK  START_TASK_STK[START_STK_SIZE];//创建任务堆栈空间
 29
 30 /*LED1任务*/
 31     #define  LED1_TASK_PRIO   6  //设置任务优先级
 32     #define  LED1_STK_SIZE    64  //空间大小=64*4(字节)
 33     OS_STK   LED1_TASK_STK[LED1_STK_SIZE];//创建任务堆栈空间
 34
 35 /*LED2任务*/
 36     #define  LED2_TASK_PRIO   7  //设置任务优先级
 37     #define  LED2_STK_SIZE    64  //空间大小=64*4(字节)
 38     OS_STK   LED2_TASK_STK[LED2_STK_SIZE];//创建任务堆栈空间
 39
 40
 41 /*LED3任务*/
 42     #define  LED3_TASK_PRIO   8  //设置任务优先级
 43     #define  LED3_STK_SIZE    64  //空间大小=64*4(字节)
 44     OS_STK   LED3_TASK_STK[LED3_STK_SIZE];//创建任务堆栈空间
 45
 46
 47
 48
 49 /**********************************************************
 50 *
 51 *  调用函数声明
 52 *
 53 **********************************************************/
 54 void RCC_Configuration(void);//时钟配置函数
 55
 56 void  start_task(void *pdata);//开始任务函数
 57
 58
 59
 60
 61
 62 /**********************************************************
 63 *
 64 *  主函数
 65 *
 66 **********************************************************/
 67 int main(void)
 68 {
 69     Delay_Init();//延时函数初始化
 70
 71     RCC_Configuration();//时钟配置
 72
 73     LED_GPIO();//LED的GPIO引脚配置
 74
 75
 76 /*操作系统的处理*/
 77     OSInit();//初始化UCOS操作系统
 78     OSTaskCreate(
 79               start_task,  //指向任务代码的指针
 80               (void *)0,    //任务开始执行时,传递给任务参数的指针
 81               (OS_STK *) & START_TASK_STK[START_STK_SIZE-1],//分配给任务堆栈的栈顶指针
 82               START_TASK_PRIO//分配给任务的优先级
 83              );
 84     OSStart();//启动OS操作系统
 85
 86
 87
 88
 89 }
 90
 91
 92
 93 /**********************************************************
 94 *
 95 *  函数名称:RCC_Configuration(void)
 96 *  函数功能:时钟配置
 97 *  输入参数:无
 98 *  输出参数:无
 99 *  函数说明:无
100 *
101 **********************************************************/
102 void  RCC_Configuration(void)
103 {
104     SystemInit();//系统初始化
105
106     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//LED1对应GPIO时钟使能
107     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//LED2、LED3对应GPIO时钟使能
108 }
109
110
111
112
113
114
115 /**********************************************************
116 *
117 *  函数名称:start_task(void *pdata)
118 *  函数功能:开始任务
119 *  输入参数:*pdata
120 *  输出参数:无
121 *  函数说明:无
122 *
123 **********************************************************/
124 void  start_task(void *pdata)
125 {
126    OS_CPU_SR  cpu_sr=0;
127
128    pdata=pdata;//防止编译器报错
129
130    OSStatInit();//初始化统计任务
131
132    OS_ENTER_CRITICAL();//进入临界区,中断无法打断
133
134 /*创建任务*/
135    /*LED1任务*/
136    OSTaskCreate(
137               led1_task,  //指向任务代码的指针
138               (void *)0,    //任务开始执行时,传递给任务参数的指针
139               (OS_STK *) & LED1_TASK_STK[LED1_STK_SIZE-1],//分配给任务堆栈的栈顶指针
140               LED1_TASK_PRIO//分配给任务的优先级
141              );
142      /*LED2任务*/
143    OSTaskCreate(
144               led2_task,  //指向任务代码的指针
145               (void *)0,    //任务开始执行时,传递给任务参数的指针
146               (OS_STK *) & LED2_TASK_STK[LED2_STK_SIZE-1],//分配给任务堆栈的栈顶指针
147               LED2_TASK_PRIO//分配给任务的优先级
148              );
149     /*LED3任务*/
150    OSTaskCreate(
151               led3_task,  //指向任务代码的指针
152               (void *)0,    //任务开始执行时,传递给任务参数的指针
153               (OS_STK *) & LED3_TASK_STK[LED3_STK_SIZE-1],//分配给任务堆栈的栈顶指针
154               LED3_TASK_PRIO//分配给任务的优先级
155              );
156
157    OSTaskSuspend(START_TASK_PRIO);//挂起开始任务
158
159    OS_EXIT_CRITICAL();//退出临界区,可以被中断打断
160
161 }

  1 /*****************************************************************************************************************************
  2 *
  3 *  文件名称:pbdata.c
  4 *  文件功能:自定义函数
  5 *  文件说明:无
  6 *
  7 *****************************************************************************************************************************/
  8
  9
 10
 11 #include "pbdata.h"
 12
 13 u8 dt=0;
 14 static u8  fac_us=0;//us延时倍乘数
 15 static u16 fac_ms=0;//ms延时倍乘数
 16
 17
 18
 19 /**********************************************************
 20 *
 21 *  函数名称:Delay_Init(void)
 22 *  函数功能:初始化延时函数
 23 *  输入参数:无
 24 *  输出参数:无
 25 *  函数说明:当使用ucos的时候,此函数会初始化ucos的时钟节拍
 26 *            SYSTICK的时钟固定为HCLK时钟的1/8
 27 *            SYSCLK:系统时钟
 28 *
 29 **********************************************************/
 30 void Delay_Init(void)
 31 {
 32     u32 reload;
 33     SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);    //选择外部时钟,HCLK/8
 34     fac_us=SystemCoreClock/8000000;    //为系统时钟的1/8
 35
 36     reload=SystemCoreClock/8000000;    //每秒钟的计数次数,单位为K
 37     reload*=1000000/OS_TICKS_PER_SEC;//根据OS_TICKS_PER_SEC设定溢出事件,reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右
 38
 39     fac_ms=1000/OS_TICKS_PER_SEC;// 代表ucos可以延时的最少单位
 40     SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;       //开启SYSTICK中断
 41     SysTick->LOAD=reload;     //每1/OS_TICKS_PER_SEC秒中断一次
 42     SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;       //开启SYSTICK
 43 }
 44
 45
 46
 47
 48
 49 /**********************************************************
 50 *
 51 *  函数名称:delay_us(u32 nus)
 52 *  函数功能:延时微秒子程序
 53 *  输入参数:nus,  延时微秒数
 54 *  输出参数:无
 55 *  函数说明:无
 56 *
 57 **********************************************************/
 58 void delay_us(u32 nus)
 59 {
 60     u32 ticks;
 61     u32 told,tnow,tcnt=0;
 62     u32 reload=SysTick->LOAD;    //LOAD的值
 63     ticks=nus*fac_us;             //需要的节拍数
 64     tcnt=0;
 65     told=SysTick->VAL;            //刚进入时的计数器值
 66     while(1)
 67     {
 68         tnow=SysTick->VAL;
 69         if(tnow!=told)
 70         {
 71             if(tnow<told)tcnt+=told-tnow;//这里注意一下SYSTICK是一个递减的计数器就可以了
 72             else tcnt+=reload-tnow+told;
 73             told=tnow;
 74             if(tcnt>=ticks)break;//时间超过/等于要延时的事件,则退出
 75         }
 76     };
 77 }
 78
 79
 80
 81
 82
 83
 84 /**********************************************************
 85 *
 86 *  函数名称:delay_ms(u16 nms)
 87 *  函数功能:延时毫秒子程序
 88 *  输入参数:nms,  延时微秒数
 89 *  输出参数:无
 90 *  函数说明:无
 91 *
 92 **********************************************************/
 93 void delay_ms(u16 nms)
 94 {
 95     if(OSRunning==TRUE)//如果os已经在跑了
 96     {
 97         if(nms>=fac_ms)//延时的事件大于ucos的最少时间周期
 98         {
 99                OSTimeDly(nms/fac_ms);//ucos延时
100         }
101         nms%=fac_ms;                //ucos已经无法提供这么小的延时了,采用普通方式延时
102     }
103     delay_us((u32)(nms*1000));    //普通方式延时,此时ucos无法启动调度
104 }
105
106
107
108
109 /**********************************************************
110 *
111 *  函数名称:delay(u32 nCount)
112 *  函数功能:普通不精确延时
113 *  输入参数:nCount,  延时时间长短
114 *  输出参数:无
115 *  函数说明:无
116 *
117 **********************************************************/
118 void delay(u32 nCount)
119 {
120     for(;nCount!=0;nCount--);
121 }

 1 /*****************************************************************************************************************************
 2 *
 3 *  文件名称:pbdata.h
 4 *  文件功能:自定义函数的头文件声明
 5 *  文件说明:无
 6 *
 7 *****************************************************************************************************************************/
 8
 9
10 #ifndef _pbdata_H
11 #define _pbdata_H
12
13
14
15
16
17
18 /**********************************************************
19 *
20 *  需要引入的头文件
21 *
22 **********************************************************/
23 #include "stm32f10x.h"
24 #include "includes.h"
25 #include "misc.h"
26
27 #include "led.h"//LED相关头文件
28
29
30
31 /**********************************************************
32 *
33 *  子函数程序声明
34 *
35 **********************************************************/
36 void delay(u32 nCount);//普通不精确延时
37 void Delay_Init(void);//延时函数初始化
38 void delay_us(u32 nus);//微秒延时
39 void delay_ms(u16 nms);//毫秒延时
40
41
42
43 #endif

  1 /*****************************************************************************************************************************
  2 *
  3 *  文件名称:stm32f10x_it.c
  4 *  文件功能:中断处理函数
  5 *  文件说明:无
  6 *
  7 *****************************************************************************************************************************/
  8 #include "stm32f10x_it.h"
  9 #include "pbdata.h"
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19 /**********************************************************
 20 *
 21 *  函数名称:NMI_Handler(void)
 22 *  函数功能:NMI中断处理函数
 23 *  输入参数:无
 24 *  输出参数:无
 25 *  函数说明:无
 26 *
 27 **********************************************************/
 28 void NMI_Handler(void)
 29 {
 30 }
 31
 32
 33
 34
 35
 36
 37
 38 /**********************************************************
 39 *
 40 *  函数名称:USART1_IRQHandler(void)
 41 *  函数功能:USART1中断处理函数
 42 *  输入参数:无
 43 *  输出参数:无
 44 *  函数说明:无
 45 *
 46 **********************************************************/
 47 void USART1_IRQHandler(void)
 48 {
 49    while(1);
 50 }
 51
 52
 53
 54
 55 /**********************************************************
 56 *
 57 *  函数名称:HardFault_Handler(void)
 58 *  函数功能:UHardFault中断处理函数
 59 *  输入参数:无
 60 *  输出参数:无
 61 *  函数说明:无
 62 *
 63 **********************************************************/
 64 void HardFault_Handler(void)
 65 {
 66   /* Go to infinite loop when Hard Fault exception occurs */
 67   while (1)
 68   {
 69   }
 70 }
 71
 72
 73
 74
 75
 76
 77
 78 /**********************************************************
 79 *
 80 *  函数名称:MemManage_Handler(void)
 81 *  函数功能:MemManage中断处理函数
 82 *  输入参数:无
 83 *  输出参数:无
 84 *  函数说明:This function handles Memory Manage exception.
 85 *
 86 **********************************************************/
 87 void MemManage_Handler(void)
 88 {
 89   /* Go to infinite loop when Memory Manage exception occurs */
 90   while (1)
 91   {
 92   }
 93 }
 94
 95
 96
 97
 98
 99
100 /**********************************************************
101 *
102 *  函数名称:BusFault_Handler(void)
103 *  函数功能:BusFault中断处理函数
104 *  输入参数:无
105 *  输出参数:无
106 *  函数说明:This function handles Bus Fault exception.
107 *
108 **********************************************************/
109 void BusFault_Handler(void)
110 {
111   /* Go to infinite loop when Bus Fault exception occurs */
112   while (1)
113   {
114   }
115 }
116
117
118
119
120
121 /**********************************************************
122 *
123 *  函数名称:UsageFault_Handler(void)
124 *  函数功能:UsageFault中断处理函数
125 *  输入参数:无
126 *  输出参数:无
127 *  函数说明:This function handles Usage Fault exception.
128 *
129 **********************************************************/
130 void UsageFault_Handler(void)
131 {
132   /* Go to infinite loop when Usage Fault exception occurs */
133   while (1)
134   {
135   }
136 }
137
138
139
140
141
142 /**********************************************************
143 *
144 *  函数名称:SVC_Handler(void)
145 *  函数功能:SVC中断处理函数
146 *  输入参数:无
147 *  输出参数:无
148 *  函数说明:This function handles SVCall exception.
149 *
150 **********************************************************/
151 void SVC_Handler(void)
152 {
153 }
154
155
156
157
158 /**********************************************************
159 *
160 *  函数名称:DebugMon_Handler(void)
161 *  函数功能:DebugMon中断处理函数
162 *  输入参数:无
163 *  输出参数:无
164 *  函数说明:This function handles Debug Monitor exception.
165 *
166 **********************************************************/
167 void DebugMon_Handler(void)
168 {
169 }
170
171
172
173
174
175
176
177 /**********************************************************
178 *
179 *  函数名称:SysTick_Handler(void)
180 *  函数功能:SysTick中断处理函数
181 *  输入参数:无
182 *  输出参数:无
183 *  函数说明:This function handles SysTick Handler.
184 *
185 **********************************************************/
186 void SysTick_Handler(void)
187 {
188     OSIntEnter();    //进入中断
189     OSTimeTick(); //调用ucos的时钟服务程序
190     OSIntExit();  //触发任务切换软中断
191 }
192
193
194
195
196
197
198 /**********************************************************
199 *
200 *  函数名称:EXTI9_5_IRQHandler(void)
201 *  函数功能:EXTI9_5中断处理函数
202 *  输入参数:无
203 *  输出参数:无
204 *  函数说明:无
205 *
206 **********************************************************/
207 void EXTI9_5_IRQHandler(void)
208 {
209
210 }
211
212
213
214
215
216
217 /**********************************************************
218 *
219 *  函数名称:EXTI1_IRQHandler(void)
220 *  函数功能:EXTI1中断处理函数
221 *  输入参数:无
222 *  输出参数:无
223 *  函数说明:无
224 *
225 **********************************************************/
226 void EXTI1_IRQHandler(void)
227 {
228
229 }
230
231
232
233
234
235
236
237 /**********************************************************
238 *
239 *  函数名称:EXTI2_IRQHandler(void)
240 *  函数功能:EXTI2_中断处理函数
241 *  输入参数:无
242 *  输出参数:无
243 *  函数说明:无
244 *
245 **********************************************************/
246 void EXTI2_IRQHandler(void)
247 {
248
249 }
250
251
252
253
254
255
256
257
258 /**********************************************************
259 *
260 *  函数名称:EXTI3_IRQHandler(void)
261 *  函数功能:EXTI3_中断处理函数
262 *  输入参数:无
263 *  输出参数:无
264 *  函数说明:无
265 *
266 **********************************************************/
267 void EXTI3_IRQHandler(void)
268 {
269
270 }

  1 /*****************************************************************************************************************************
  2 *
  3 *  文件名称:led.c
  4 *  文件功能:led相关函数
  5 *  文件说明:无
  6 *
  7 *****************************************************************************************************************************/
  8
  9
 10
 11
 12 #include "pbdata.h"
 13
 14
 15
 16 /**********************************************************
 17 *
 18 *  函数名称:LED_GPIO(void)
 19 *  函数功能:LED的GPIO配置
 20 *  输入参数:无
 21 *  输出参数:无
 22 *  函数说明:无
 23 *
 24 **********************************************************/
 25
 26 void LED_GPIO(void)//GPIO初始化函数
 27 {
 28     GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量
 29
 30 /*LED1配置*/
 31     /*结构体变量赋值*/
 32     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;////引脚配置
 33     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率
 34     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
 35 /*对应的GPIO初始化*/
 36 GPIO_Init(GPIOB,&GPIO_InitStructure);
 37
 38 /*LED2、LED3配置*/
 39     /*结构体变量赋值*/
 40     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3 | GPIO_Pin_6;////LED2、LED3引脚配置
 41   /*对应的GPIO初始化*/
 42     GPIO_Init(GPIOD,&GPIO_InitStructure);
 43
 44
 45 }
 46
 47
 48
 49
 50
 51
 52
 53 /**********************************************************
 54 *
 55 *  函数名称:led1_task(void *pdata)
 56 *  函数功能:led1任务处理函数
 57 *  输入参数:*pdata
 58 *  输出参数:无
 59 *  函数说明:无
 60 *
 61 **********************************************************/
 62
 63 void  led1_task(void *pdata)
 64 {
 65    pdata=pdata;//防止编译器报错
 66
 67    while(1)
 68    {
 69     GPIO_SetBits(GPIOB,GPIO_Pin_5);//指定端口设置为高电平
 70
 71     delay_ms(1000);//1s,delay,公共函数库中自己定义
 72
 73     GPIO_ResetBits(GPIOB,GPIO_Pin_5);//指定端口设置低电平
 74
 75     delay_ms(1000);//1s,delay,公共函数库中自己定义
 76     }
 77
 78 }
 79
 80
 81
 82
 83
 84 /**********************************************************
 85 *
 86 *  函数名称:led2_task(void *pdata)
 87 *  函数功能:led2任务处理函数
 88 *  输入参数:*pdata
 89 *  输出参数:无
 90 *  函数说明:无
 91 *
 92 **********************************************************/
 93
 94 void  led2_task(void *pdata)
 95 {
 96    pdata=pdata;//防止编译器报错
 97
 98    while(1)
 99    {
100     GPIO_SetBits(GPIOD,GPIO_Pin_6);//指定端口设置为高电平
101
102     delay_ms(1000);//1s,delay,公共函数库中自己定义
103
104     GPIO_ResetBits(GPIOD,GPIO_Pin_6);//指定端口设置低电平
105
106     delay_ms(1000);//1s,delay,公共函数库中自己定义
107     }
108
109 }
110
111
112
113
114 /**********************************************************
115 *
116 *  函数名称:led3_task(void *pdata)
117 *  函数功能:led3任务处理函数
118 *  输入参数:*pdata
119 *  输出参数:无
120 *  函数说明:无
121 *
122 **********************************************************/
123
124 void  led3_task(void *pdata)
125 {
126    pdata=pdata;//防止编译器报错
127
128    while(1)
129    {
130     GPIO_SetBits(GPIOD,GPIO_Pin_3);//指定端口设置为高电平
131
132     delay_ms(1000);//1s,delay,公共函数库中自己定义
133
134     GPIO_ResetBits(GPIOD,GPIO_Pin_3);//指定端口设置低电平
135
136     delay_ms(1000);//1s,delay,公共函数库中自己定义
137     }
138
139 }

 1 /*****************************************************************************************************************************
 2 *
 3 *  文件名称:led.h
 4 *  文件功能:led相关函数的头文件
 5 *  文件说明:无
 6 *
 7 *****************************************************************************************************************************/
 8
 9
10 #ifndef _LED_H
11 #define _LED_H
12
13 #include "pbdata.h"
14
15
16 void LED_GPIO(void);//LED的GIPO引脚配置
17
18 void  led1_task(void *pdata);//LED1任务
19 void  led2_task(void *pdata);//LED2任务
20 void  led3_task(void *pdata);//LED3任务
21
22
23
24 #endif

2、工程下载:

http://download.csdn.net/detail/a1181803348/8828991

时间: 2024-11-10 01:19:06

5、3个LED任务闪烁的相关文章

Arduino 翻译系列 - LED 灯闪烁

原文地址 - https://www.arduino.cc/en/Tutorial/Blink 闪烁 这个例子展示了你能拿 Arduino / Genuino 板子来干的最简单的事:使开发板上的 LED 灯闪烁. 硬件需求 Arduino 开发板 LED (非必要) 220欧电阻(非必要) 电路 这例程使用了大部分 Arduino / Genuino 开发板上都有的 LED 指示灯.这 LED 灯是连接到数字引脚的,而它在不同型号的开发板上的引脚号都不一样.为了方便大家,我们已经每种开发板的描述

STM32通用定时器实现LED灯闪烁

刚才看了一下STM32通用定时器的教程,其实和51的定时器使用差不多.只是因为32的时钟更复杂,可操控的寄存器更多,所以写的时候可能更复杂. 使用通用定时器中断的一般步骤:1.使能定时器时钟 这个需要看时钟树,使能对应的时钟就好了.这里我使用的是TIM3,所以使能APB1的时钟即可. 2.设置定时器的分频系数和重装载值 定时器中断的时间为:Tout = (arr+1)/[Tclk/(psc+1)] 其实这个定时器中断时间还是要具体分析,这里是这样,其他地方或许不是这样,具体还是要参考<STM32

WLGK-51单片机接口技术基础实验 ——LED闪烁灯

WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这个实验是带领我们走入"软硬件综合使用"的一个很好入门示例,51单片机是他的一个载体.下面小伙伴们,让我们一起来揭开LED的神秘面纱吧! 万立高科官网:www.wanligaoke.com 万立高科官方商城:http://www.wlgkbj.com 万立高科淘宝直销店铺:https://r

bb_black_学习笔记&mdash;&mdash;(4)闪烁LED之shell命令

上一篇笔记在终端输入shell命令实现了LED灯的点亮与熄灭,作为初学者,已经兴奋了一阵,因为终于有了零的突破.手动点亮LED总会比较麻烦,还是得通过程序让它自己去点亮与熄灭,这样才更好玩.这篇笔记里,笔者通过学习shell脚本,实现LED的闪烁,这样才好玩.本篇笔记还是先从现象看起,然后在分析其实现原理. 第一步:实现LED灯闪烁 1.先来个简单的shell脚本,了解一下shell脚本的使用流程.下图为创建一个名为hello_sh的shell脚本编辑执行的过程. 几点说明: (1)shell脚

第7章 led闪烁

上节中了解到驱动程序的开发步骤,并给了一个实列来演示如何开发一个完整的驱动.但这个驱动只是简单的演示了实现步骤.真正的驱动需要与硬件直接进行相互交互.这节完整的演示驱动程序,控制开发板上的4个led灯闪烁.在开发前我们了解下工作原理.linux驱动直接与硬件打交道,但并不是驱动直接向硬件中的内存协数据,而是本机的输入输出进行交互.系统中提供了多种交互的函数,每个系统的硬件在IO中都会有映射首地址.在使用等函数写内存是要指定这些首地址,编写驱动前了解下LED驱动功能,并在开发板上测试LED.驱动会

【Window 10 IoT - 2】LED闪烁及动画绘制(树莓派 Pi2)

在上一篇博文<Windows 10 IoT系统安装>中,我们实现了在树莓派2平台上运行Window 10 IoT,本篇文章将介绍在该平台上的程序开发. 在最初获得的资讯中,以为Windows10 IoT版本不支持界面开发,没有想到,实际测试后,画面功能支持的还不错(画面功能的支持,通过命令可以打开也可以关闭).画面功能的支持,将使Windows 10 IoT系统的应用场景变得更为众多.另外还以为开发Windows 10 IoT,必须基于Windows 10平台,实际测试发现,在Windows

STM32使用TIM闪烁LED——输出比较方式

STM32定时器输出比较器可以直接操作对应的GPIO,在计数器值等于比较寄存器的值时,对应的GPIO可以有以下四种动作 无动作 激活 取消激活 翻转 激活电平由输出极性寄存器决定 将LED置于定时器输出比较对应的GPIO上,对它的操作将非常方便,完全由硬件完成,不消耗CPU时间,无需中断,每个定时器都对应有4个输出比较,可以轻松实现4个LED的流水灯效果 宏定义部分如下 #define USER_TIM_PSC 36000-1 #define USER_TIM_PERIOD 1000-1 #de

内核中led触发器实例【转】

本文转载自:http://blog.csdn.net/yuanlulu/article/details/6438847 ============================================作者:yuanluluhttp://blog.csdn.NET/yuanlulu 版权没有,但是转载请保留此段声明============================================ gpio-led框架 /driver/leds/leds-gpio.c下实现了gpio-

TQ2440上LED灯闪烁效果的驱动程序实现

本篇文章的驱动程序实现的要点:一是实现了设备文件的自动创建,不用每次运行驱动都要使用mknod指令自动创建设备文件,本文通过udev(mdev)来实现设备文件的自动创建.二是对LED灯的控制不是通过直接设置相关GPIO的二进制位来实现,本文使用linux系统中提供的对S3C2410 GPIO的操作函数,直接实现对相关GPIO的控制.三是实现了LED灯的闪烁效果,本文虽然没有在驱动程序代码中直接实现LED灯的闪烁效果,但是通过上层应用程序调用驱动程序中的ioctl间接实现了LED灯的闪烁效果. 一