首页 > 编程知识 正文

stm32三色灯,stm32用gpio点亮led灯

时间:2023-05-06 03:45:39 阅读:115158 作者:2075

参考: stm32计时器和计时器中断

作者:浇酱油的人

发布时间: 2021-04-11 01:04:09

URL:https://blog.csdn.net/weixin _ 46098612/article/details/115493737

参考: stm32通用定时器结构函数定时器实现led闪烁

作者:小灯

发布时间: 2021-03-09 12:13:32

URL:https://blog.csdn.net/weixin _ 46016743/article/details/114579672

目录计时器的概念1 )计时器的种类2 )通用计时器的特征记述3 )计时器中断触发条件4 )计时器计数模式5 )通用计时器作用用途6 )动作中使用通用计时器结构体函数配置步骤通用计时器,每秒点亮LED灯

计时器的概念1 .计时器的种类

注:主要使用通用定时器

DMA(Direct Memory Access,直接内存存取)是所有现代计算机的重要特征,它允许在不同速度的硬件设备上进行通信,而不依赖于CPU的大量中断负载。

否则,CPU必须将每个片段的数据从源复制到临时存储中,然后将它们再次写入新位置。 这个时间,CPU不能用于其他工作。

DMA传输将数据从一个地址空间复制到另一个地址空间。 当CPU初始化该传输动作时,传输动作本身由DMA控制器执行并完成。

2 .通用定时器的特征说明

3 .定时器中断触发条件

4 .计时器计数模式分为向上,向下,向上向下模式

5 .通用定时器作用用途

6 .工作过程

对照着STM32中文参考手册14.1章节,红色部分重点关注

1、时钟来源:

a .内部时钟APB1分频器ckl_int (主) ) ) ) ) )。

b .其他通用定时器外部端子2、3、4

c .其他计时器

d .外部频道(略)。

2、时基单元(时间控制单元) :

预分频(除法) ) ) ) )。

计数器时钟

自动重载值

3、输入部分:

输入端子

边缘检测

4、输出部分 :

a输出比较寄存器

周期b-重载值

占空比-比较值

通用计时器结构函数

注:实际使用的只有前三名成员,最后两人属于高级寄存器

配置步骤

使用通用计时器每秒cqdbmh.c

# include ' STM 32 F10 x.h '//device header # include ' cqd bmh.h ' voidcqdbmh _ config (void ) { pgddgz _ timebaseinityty //3 .打开定时器中断,配置中断结构的是系统内核中断RCC _ AP B1 periphclockcmd (RCC _ AP B1 per iph _ pgddgz 2,ENABLE ); //1 .使能时钟定时器nvic _ prioritygroupconfig (nvic _ priority group _1); //中断服务组pgddgzinitstructure.pgddgz _ clock division=pgddgz _ CKD _ div 1; //1分频,即pgddgzinitstructure.pgddgz _ counter mode=pgddgz _ counter mode _ up; //计数模式为向上pgddgzinitstructure.pgddgz _ period=10000-1; //Tout自动重载值pgddgzinitstructure.pgddgz _ prescaler=7200-1; //分配器计数值pgddgz_timebaseinit(pgddgz2,pgddgzinitStructure ); pgddgz_cmd(pgddgz2,ENABLE ); 需要//定时器使能//it的都是中断pgddgz_itconfig(pgddgz2,pgddgz_IT_Update,ENABLE ); //设定计时器会导致中断线//中断源nvicinitstructure.nvic _ IRQ channel=pgddgz2_ irqn; //中断通道的中断源为系统定时器2 nvicinitstructure.nvic _ irqchannelpreemptionpriority=1; //抢占优先级nvicinitstructure.nvic _ irqchannelsubpriority=1; //次优先级nvicinitstructure.nvic _ irqchannelcmd=enable; //nvic _ init (启用nvicinitstructure; } cqdbmh.h

# include ' STM 32 F10 x.h '//deviceheadervoidcqdbmh _ config (void ); //声明main.c

# include ' STM 32 F10 x.h '//设备头# include ' usart.h ' # include ' led.h ' # include ' cqd bmh.h ' void delay way while(I----; }intmain(void ) ) {LED_Init ); cqdbmh_config (; Gpio_setbits(gpioc,GPIO_Pin_13 ); //初始化写停机while(1) }//4.配置计时器中断服务函数名称与固件库相同的voidpgddgz2_IRQHandler ) { static uint 16 _ t temmid //静态变量if(pgddgz_getitstatus(pgddgz2,pgddgz_IT_Update )!=确定=RESET计时器中断标志位是否在头文件stm32f10x_cqdbmh.h中打开。 //秒打开一次中断计时器的本质也就是说,计数器即使不写延迟函数也一直占用CPU的资源。 if(temp%2==1) /剩余奇偶校验判断(gpio _ resest } else { gpio _ set bits (gpioc,GPIO_Pin_13 ); } pgddgz _ clearitpendingbit (pgddgz 2,pgddgz_IT_Update ); //最后用计时器清除中断标志位}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。