在STM32stm32最新固件库库中TIM 预分频值在更新事件装入,TIM 预分频...

STM32F4 定时器TIM(1)定时器控制输出【使用库函数】 - 编程浪子_ - 博客园
高级时钟控制定时器TIM1&TIM8简介: STM32F4的高级控制定时器包含一个自动重装载计数器,计数器的输入是一个被预分频的系统时钟。 这个定时器有多种用途,包括车辆输入信号长度(输入捕获模式)或者产生波形输出(输出捕获,PWM,带死区插入的互补PWM输出等) 脉冲长度和波形周期可在通过定时器的预分频器或者RCC的预分频器在几个微秒时钟内调整。 高级控制定时器和通用定时器完全独立,不共享任何资源。 高级时钟控制定时器TIM1&TIM8的主要特性: 1、16位向上、向下、双向自动重装载计数器2、16位预分频器,分频值从1打个独立通道4、带死去输出的互补输出5、控制外部信号的同步电路6、刹车输入7、产生中断和DMA强求8、可外部触发 等等。。 TIM定时器确实很强大。至于怎么用,ST的手册不出奇的难看,完全没有条理可言。昨天看一天,都没明白是在说什么。配套的固件库也是,各种函数的介绍,函数名结构体定义完全没有逻辑可言。于是只能参照网友的介绍,从最基础的部分弄起。 参考资料见: 【实验1、TIM1的计时功能】 【实验描述】 利用TIM1的技术功能,产生2Hz的中断每次中断LED1反转,LED1反转频率为1Hz。 根据时钟配置,系统时钟为168MHz,APB2时钟为84MHz。TIM1挂接在APB2上,所以APB2 时钟为84MHz。 因此预分频系数设置成了10,自动重装载计数器ARR(TIM_Period)设置成了8。每次计数满产生中断。 中断频率f= 84MHz /4200 / 10000 = 2Hz 【代码实现】 1、首先开启TIM1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); 2、时基单元的初始化 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period = 0x1068;TIM_TimeBaseInitStructure.TIM_Prescaler = 0x2710;TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0x00; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure); TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStructure);TIM_ClearFlag(TIM1,TIM_FLAG_Update);&& //必须先清除配置时候产生的更新标志TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);&& //使能中断,中断事件为定时器工薪事件TIM_Cmd(TIM1,ENABLE);&&& //使能定时器 3、中断处理函数 没什么可说的,反转LED灯而已。每次中断反转一次,2Hz的中断产生1Hz的闪烁。 中断名字是库里边定义的,跟TIM10全局中断公用。 void TIM1_UP_TIM10_IRQHandler(void){& TIM_ClearFlag(TIM1,TIM_FLAG_Update);//进入中断先清除更新标志& LEDTog(LED1);} 之后我们就可以看到LED以大约1Hz的频率在闪烁了。 【实验2、强制输出模式实验】 百度来的强制输出模式的定义:在程序编程中,IO口一般都可以作为输入输出的。而有些数据要在让其执行时候必须执行,所以让其强制性的输出。这是IO口只能做一件事。 看完之后还是一头雾水。 简单 点说,就是不管当时IO输出的是什么,都能强制将其设为0或者为1. 【实验描述】 为了实验方便,这个实验使用TIM4的强制输出功能,点亮与GPIOD Pin13引脚相连的LED3。对于强制输出功能,高级定时器和通用定时器是完全一样的。 TIM4的CH2被复用在GPIOD 的Pin13。所以可以将这个输出强制为高,将LED点亮。 【代码实现】 1、首先将GPIO初始化为AF复用功能。 CM4的引脚复用功能和CM3的实现方法不同,要特别注意。按照CM3的写法将不会有输出void TIM4_GPIO_Config(void){& GPIO_InitTypeDef GPIO_initS& RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);& & GPIO_initStructure.GPIO_Mode = GPIO_Mode_AF;& GPIO_initStructure.GPIO_OType = GPIO_OType_PP;& GPIO_initStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;& GPIO_initStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;& GPIO_initStructure.GPIO_Speed = GPIO_Speed_100MHz;& GPIO_Init(GPIOD,&GPIO_initStructure);& & GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_TIM4);& GPIO_PinAFConfig(GPIOD,GPIO_PinSource13,GPIO_AF_TIM4);& GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_TIM4);& GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_TIM4);} 2、TIM4的初始化 这里的时钟我没有计算,因为这个实验不太关注这个。 void TIM4_Config1(void){& TIM4_GPIO_Config();& RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);& & TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;& TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;& TIM_TimeBaseInitStructure.TIM_Period =0x1068;& TIM_TimeBaseInitStructure.TIM_Prescaler = 0x2710;& TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0x00;& TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);& TIM_ARRPreloadConfig(TIM4,ENABLE);& & TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_A;& //设置成什么模式都行。& TIM_OCInitStructure.TIM_Pulse= 1000;& TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H& TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_E& TIM_OC2Init(TIM4,&TIM_OCInitStructure); & TIM_Cmd(TIM4,ENABLE);} 3、在主函数中强制输出。 初始化完成之后,在任何时候都能强制引脚电平,只需要一个函数即可: TIM_ForcedOC2Config(TIM4,TIM_ForcedAction_Active);这个函数设置TIM的CCMR1的OCxM位为101或者100实现输出的拉高或拉低 【实验三、比较输出】一直不理解这里的比较是哪两个东西在进行比较。今天翻ST参考手册 reference manual发现这么句话: 当OCxM位为000时:The comparison between the output compare register& TIMx_CCR1 and the counter TIMx_CNT has no effect on the outputs. 即这里的“比较”是TIMx_CCR1和TIMx_CNT的比较。两个相等时,触发事件。这个事件发生时,TIm根据CCMRx寄存器的OCxM位进行输出。 OCxM不同设置的不同功能如下表所示:
OCxM[2..0]值 功能
000 对输出不影响
001 相等时输出强制为1
010 相等时输出强制为0
011 输出反转
100 不管是否相等,强制为0
101 不管是否相等,强制为1
110 PWM模式1(先正后负)
111 PWM模式2(先负后正) 结合库中的定义,可以很方便地改变输出方式: #define TIM_OCMode_Timing&&&&&&&&&&&&&&&&& ((uint16_t)0x0000)#define TIM_OCMode_Active&&&&&&&&&&&&&&&&& ((uint16_t)0x0010)#define TIM_OCMode_Inactive&&&&&&&&&&&&&&& ((uint16_t)0x0020)#define TIM_OCMode_Toggle&&&&&&&&&&&&&&&&& ((uint16_t)0x0030)#define TIM_OCMode_PWM1&&&&&&&&&&&&&&&&&&& ((uint16_t)0x0060)#define TIM_OCMode_PWM2&&&&&&&&&&&&&&&&&&& ((uint16_t)0x0070) 【实验现象】 LED周期闪烁 【代码实现】 只需要将上边的代码中的TIM_OCMode改成PWM即可。 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_T 参数TIM_Pulse对这种模式没影响,TIM_OCPolarity只影响先输出的是低电平还是高电平。 【实验4、PWM输出】 这是输出部分的传统了。所有的开发板的TIM例子都是一个PWM输出。 时基单元好了,设置一下输出模式,反转时机(TIM_Pulse)。然后开启哥哥通道的OC即可。对于每个Tim的所有通道,由于时基配置是一样的所以只能改变各个通道的占空比。 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;//PWM2也行TIM_OCInitStructure.TIM_Pulse= 2000;//CCR,设置占空比。反转模式时候无效TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_H& TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_ETIM_ClearFlag(TIM4,TIM_FLAG_CC2);TIM_OC2Init(TIM4,&TIM_OCInitStructure);当然,引脚初始化不能少的。 【实验5、单脉冲方式】 只需要在上边的代码之后加一句: TIM_SelectOnePulseMode(TIM4,TIM_OPMode_Single); 这样讲产生一个负脉冲,效果是LED灭一下之后保持常亮。如果要要让LED亮一下,输出正脉冲还需要改下输出的极性: TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_L
到这里,TIM控制输出的实验基本就做完了。马上开始TIM控制输入部分,包括输入捕获、PWM输入等。 & & Technorati 标记: ,,,,,,[转载]STM32时基单元
STM32时基单元详解
STM8时基单元
时基单元包含:
16位向上/向下计数器
16位自动重载寄存器
重复计数器
(图29:STM8 时基单元)
16位计数器,预分频器,自动重载寄存器和重复计数器寄存器都可以通过软件进行读写操作。自动重载寄存器由预装载寄存器和影子寄存器组成。
可在在两种模式下写自动重载寄存器:
自动预装载已使能(TIM1_CR1寄存器的ARPE位置位)。在此模式下,写入自动重载寄存器的数据将被保存在预装载寄存器中,并在下一个更新事件(UEV)时传送到影子寄存器。
自动预装载已禁止(TIM1_CR1寄存器的ARPE位清除)。在此模式下,写入自动重载寄存器的数据将立即写入影子寄存器。
更新事件的产生条件:
计数器向上或向下溢出。
软件置位了TIM1_EGR寄存器的UG位。
时钟/触发控制器产生了触发事件。
在预装载使能时(ARPE=1),如果发生了更新事件,预装载寄存器中的数值(TIM1_ARR)将写入影子寄存器中,并且TIM1_PSCR寄存器中的值将写入预分频器中。
置位TIM1_CR1寄存器的UDIS位将禁止更新事件(UEV)。
计数器由预分频器的输出CK_CNT驱动,而CK_CNT仅在IM1_CR1寄存器的计数器使能位(CEN)被置位时才有效。
注意:在使能了CEN位的一个时钟周期后,计数器才开始计数。
读写16位计数器
写计数器的操作没有缓存,并且可以在任何时候写TIM1_CNTRH和TIM1_CNTRL寄存器,因此我们建议不要在计数器运行时写入新的数值,以免写入了错误的数值。
读计数器的操作带有8位的缓存。在用户读了高位(MS)字节后,低位(LS)字节将被自动缓存,缓存的数据在16位的读操作完成之前不会有变化,图30解释了这一过程。
注意:不要使用LDW指令来读取16位计数器的值,因为此指令先读低位(LS)字节,这样读出的数值是错误的。
(图30:STM8 读16位计数器的过程(TIM1_CNTR))
16位TIM1_ARR寄存器的写操作
预装载寄存器中的值将写入16位的TIM1_ARR寄存器中,此操作由两条指令完成,每条指令写入1个字节,高位(MS)字节是先写入的。
影子寄存器在高位(MS)字节写入时被锁定,并保持到低位(LS)字节写完。不要使用LDW指令,因为此指令先写低位(LS)字节,这将导致写入的数值错误。
STM8预分频器
预分频器的实现:
TIM1的预分频器基于一个由16位寄存器(TIM1_PSCR)控制的16位计数器。由于这个控制寄存器带有缓冲器,因此它能够在运行时被改变。预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。
计数器的频率可以由下式计算:
fCK_CNT=fCK_PSC/(PSCR[15:0]+1)
预分频器的值由预装载寄存器写入,保存了当前使用值的影子寄存器在低位(LS)写入时被载入。
需两次单独的写操作来写16位寄存器,高位(MS)先写。不要使用先写低位(LS)的LDW指令。
新的预分频器的值在下一次更新事件到来时被采用。
对TIM1_PSCR寄存器的读操作通过预装载寄存器完成,因此不需要特别的关注。
向上计数模式
在向上计数模式中,计数器从0计数到用户定义的比较值(TIMx_ARR寄存器的值),然后重新从0开始计数并产生一个计数器溢出事件,同时,如果TIM1_CR1寄存器的UDIS位是0,将会产生一个更新事件(UEV)。图31描述了向上计数模式。
(图31:STM8 向上计数模式的计数器)
置位TIMx_EGR寄存器的UG位(通过软件方式或者使用从模式控制器)也同样可以产生一个更新事件。
使用软件置位TIMx_CR1寄存器的UDIS位,可以禁止更新事件,这样可以避免在更新预装载寄存器时更新影子寄存器。在UDIS位被清除之前,将不产生更新事件。但是在应该产生更新事件时,计数器仍会被清0,同时预分频器的计数也被清0(但预分频器的数值不变)。此外,如果设置
了TIMx_CR1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事件UEV,但硬件不设置UIF标志(即不产生中断请求)。这是为了避免在捕获模式下清除计数器时,同时产生更新和捕获中断。
当发生一个更新事件时,所有的寄存器都被更新,硬件同时(依据URS位)设置更新标志位(TIMx_SR寄存器的UIF位):
自动装载影子寄存器被重新置入预装载寄存器的值(TIMx_ARR)。
预分频器的缓存器被置入预装载寄存器的值(TIMx_PSC寄存器的内容)。
下图给出一些例子,说明当TIMx_ARR=0x36时,计数器在不同时钟频率下的动作。
图32的预分频为2,因此计数器的时钟(CK_CNT)频率是预分频时钟(CK_PSC)频率的一半。
图32禁止了自动装载功能(ARPE=0),所以在计数器达到0x36时,计数器溢出,影子寄存器立刻被更新,同时产生一个更新事件。
图32当ARPE=0(ARR不预装载),预分频为2时的计数器更新。
(图32:STM8 当ARPE=0(ARR不预装载),预分频为2时的计数器更新)
图33的预分频为1,因此CK_CNT的频率与CK_PSC一致。
图33使能了自动重载(ARPE=1),所以在计数器达到0xFF产生溢出。0x36将在溢出时被写入,
同时产生一个更新事件。
(图33:STM8 ARPE=1(TIM1_ARR预装载)时的计数器更新)
向下计数模式
在向下模式中,计数器从自动装载的值(TIMx_ARR寄存器的值)开始向下计数到0,然后再从自动装载的值重新开始计数,并产生一个计数器向下溢出事件。如果TIM1_CR1寄存器的UDIS位被清除,还会产生一个更新事件(UEV)。图34描述了向下计数模式的计数器。
(图34:STM8 ARPE=1(TIM1_ARR预装载)时的计数器更新)
置位TIMx_EGR寄存器的UG位(通过软件方式或者使用从模式控制器)也同样可以产生一个更新事件。
置位TIMx_CR1寄存器的UDIS位可以禁止UEV事件。这样可以避免在更新预装载寄存器时更新影子寄存器。因此UDIS位清除之前不会产生更新事件。然而,计数器仍会从当前自动加载值重新开始计数,并且预分频器的计数器重新从0开始(但预分频器不能被修改)。
此外,如果设置了TIMx_CR1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事件UEV但不设置UIF标志(因此不产生中断),这是为了避免在发生捕获事件并清除计数器时,同时产生更新和捕获中断。
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄存器中的UIF位)也被设置:
预分频器的缓存器被存入预装载的值(TIMx_PSC寄存器的值)。
当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。要注意自动装载寄存器在计数器重载入之前被更新,因此下一个周期才是预期的值。
以下是一些当TIMx_ARR=0x36时,计数器在不同时钟频率下的图表。
下图描述了在向下计数模式下,预装载不使能时新的数值在下个周期时被写入。
(图35:STM8 ARPE=0(ARR不预装载),预分频为2时的计数器更新)
(图36:STM8 ARPE=1(ARR预装载),预分频为1时的计数器更新)
中央对齐模式(向上/向下计数)
在中央对齐模式,计数器从0开始计数到自动加载的值(TIMx_ARR寄存器)-1,产生一个计数器溢出事件,然后向下计数到0并且产生一个计数器下溢事件;然后再从0开始重新计数。
在此模式下,不能写入TIMx_CR1中的DIR方向位。它由硬件更新并指示当前的计数方向。
下图给出一个中央对齐模式的例子。
(图37:STM8 中央对齐模式的计数器)
如果定时器带有重复计数器(如TIM1),在重复了指定次数(TIM1_RCR的值)的向上和向下溢出之后会产生更新事件(UEV)。否则每一次的向上向下溢出都会产生更新事件。
置位TIMx_EGR寄存器的UG位(通过软件方式或者使用从模式控制器)也同样可以产生一个更新事件。此时,计数器重新从0开始计数,预分频器也重新从0开始计数。
设置TIMx_CR1寄存器中的UDIS位可以禁止UEV事件。这样可以避免在更新预装载寄存器时更新影子寄存器。因此UDIS位被清为0之前不会产生更新事件。然而,计数器仍会根据当前自动重加载的值,继续向上或向下计数。如果定时器带有重复计数器,由于重复寄存器没有双重的
缓冲,新的重复数值将立刻生效,因此在修改时需要小心。
此外,如果设置了TIMx_CR1寄存器中的URS位(选择更新请求),设置UG位将产生一个更新事件UEV但不设置UIF标志(因此不产生中断),这是为了避免在发生捕获事件并清除计数器时,同时产生更新和捕获中断。
当发生更新事件时,所有的寄存器都被更新,并且(根据URS位的设置)更新标志位(TIMx_SR寄存器中的UIF位)也被设置。
预分频器的缓存器被加载为预装载(TIMx_PSC寄存器)的值。
当前的自动加载寄存器被更新为预装载值(TIMx_ARR寄存器中的内容)。要注意到如果因为计数器溢出而产生更新,自动重装载寄存器将在计数器重载入之前被更新,因此下一个周期才是预期的值(计数器被装载为新的值)。以下是一些计数器在不同时钟频率下的操作的例子:
(图38:STM8 计数器时序图,内部时钟分频因子为1,TIMx_ARR=0x6,ARPE=1)
使用中央对齐模式的提示:
启动中央对齐模式时,计数器将按照原有的向上/向下的配置计数。也就是说TIM1_CR1寄存器中的DIR位将决定计数器是向上还是向下计数。此外,软件不能同时修改DIR位和CMS位的值。
不推荐在中央对齐模式下,计数器正在计数时写计数器的值,这将导致不能预料的后果。
具体的说:
向计数器写入了比自动装载值更大的数值时(TIM1_CNT&TIM1_ARR),但计数器的计数方向不发生改变。例如计数器已经向上溢出,但计数器仍然向上计数。
向计数器写入了0或者TIM1_ARR的值,但更新事件不发生。
安全使用中央对齐模式的计数器的方法是在启动计数器之前先用软件(置位TIM1_EGR寄存器的UG位)产生一个更新事件,并且不在计数器计数时修改计数器的值。
重复计数器
STM8S时基单元解释了计数器向上/向下溢出时更新事件(UEV)是如何产生的,然而事实上它只能在重复计数器的值达到0的时候产生。这个特性对产生PWM信号非常有用。
这意味着在每N次计数上溢或下溢时,数据从预装载寄存器传输到影子寄存器(TIMx_ARR自动重载入寄存器,TIMx_PSC预装载寄存器,还有在比较模式下的捕获/比较寄存器TIMx_CCRx),N是TIMx_RCR重复计数寄存器中的值。
重复计数器在下述任一条件成立时递减:
向上计数模式下每次计数器向上溢出时
向下计数模式下每次计数器向下溢出时
中央对齐模式下每次上溢和每次下溢时。
虽然这样限制了PWM的最大循环周期为128,但它能够在每个PWM周期2次更新占空比。
在中央对齐模式下,因为波形是对称的,如果每个PWM周期中仅刷新一次比较寄存器,则最大的分辨率为2xtCK_PSC。
重复计数器是自动加载的,重复速率由TIMx_RCR寄存器的值定义(参考图39)。当更新事件由软件产生(通过设置TIMx_EGR中的UG位)或者通过硬件的从模式控制器产生,则无论重复计数器的值是多少,立即发生更新事件,并且TIMx_RCR寄存器中的内容被重载入到重复计数器。
(图39:STM8不同模式下更新速率的例子,及TIMx_RCR的寄存器设置)
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。>> stm32f10x_tim1.h - STM32 &SYSTICK 配置 RAM运行 改
点击查看更多 ▼
点击收缩隐藏 ▲
stm32f10x_tim1.h - STM32 &SYSTICK 配置 RAM运行 改
源码下载: &
/******************** (C) COPYRIGHT 2007 STMicroelectronics ********************
* File Name
: stm32f10x_tim1.h
: MCD Application Team
: 10/08/2007
* Description
: This file contains all the functions prototypes for the
TIM1 firmware library.
********************************************************************************
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __STM32F10x_TIM1_H
#define __STM32F10x_TIM1_H
/* Includes ------------------------------------------------------------------*/
#include &stm32f10x_map.h&
/* Exported types ------------------------------------------------------------*/
/* TIM1 Time Base Init structure definition */
typedef struct
u16 TIM1_P
// 设置了用来作为TIM1时钟频率除数的预分频值 ;
u16 TIM1_CounterM // 选择了计数器模式 ;
u16 TIM1_P // 设置了在下一个更新事件装入活动的自动重装载寄存器周期的值 ;
u16 TIM1_ClockD // 设置了时钟分割 ;
u8 TIM1_RepetitionC
// 设置了周期计数器值。
} TIM1_TimeBaseInitTypeD
/* TIM1 Output Compare Init structure definition */
typedef struct
u16 TIM1_OCM
// 选择定时器模式。
u16 TIM1_OutputS // 选择输出比较状态。
u16 TIM1_OutputNS // 选择互补输出比较状态。
u16 TIM1_P
// 设置了待装入捕获比较寄存器的脉冲值 ;
u16 TIM1_OCP // 输出极性 ;
u16 TIM1_OCNP // 互补输出极性 ;
u16 TIM1_OCIdleS // 选择空闲状态下的非工作状态 ;
u16 TIM1_OCNIdleS // 选择空闲状态下的非工作状态 ;
} TIM1_OCInitTypeD
/* TIM1 Input Capture Init structure definition */
typedef struct
u16 TIM1_C
// 选择通道。
u16 TIM1_ICP
// 输入活动沿。
u16 TIM1_ICS // 选择输入 ;
u16 TIM1_ICP // 设置输入捕获预分频器 ;
u8 TIM1_ICF
// 选择输入比较滤波器 ;
} TIM1_ICInitTypeD
/* BDTR structure definition */
typedef struct
u16 TIM1_OSSRS // 设置在运行模式下非工作状态选项 ;
u16 TIM1_OSSIS // 设置在运行模式下非工作状态选项 ;
u16 TIM1_LOCKL // 设置了锁电平参数 ;
u16 TIM1_DeadT
// 指定了输出打开和关闭状态之间的延时。
u16 TIM1_B
// 使能或者失能TIM1刹车输入。
u16 TIM1_BreakP // 设置TIM1刹车输入管脚极性。
u16 TIM1_AutomaticO // 使能或者失能自动输出功能该参数取值 ;
} TIM1_BDTRInitTypeD
/* Exported constants --------------------------------------------------------*/
/* TIM1 Output Compare and PWM modes ----------------------------------------*/
#define TIM1_OCMode_Timing
((u16)0x0000) // TIM1输出比较时间模式 ;
#define TIM1_OCMode_Active
((u16)0x0010) // TIM1输出比较主动模式 ;
#define TIM1_OCMode_Inactive
((u16)0x0020) // TIM1输出比较非主动模式 ;
#define TIM1_OCMode_Toggle
((u16)0x0030) // TIM1输出比较触发模式 ;
#define TIM1_OCMode_PWM1
((u16)0x0060) // TIM1脉冲宽度调制模式1 ;
#define TIM1_OCMode_PWM2
((u16)0x0070) // TIM1脉冲宽度调制模式2 ;
#define IS_TIM1_OC_MODE(MODE) ((MODE == TIM1_OCMode_Timing) || \
(MODE == TIM1_OCMode_Active) || \
(MODE == TIM1_OCMode_Inactive) || \
(MODE == TIM1_OCMode_Toggle)|| \
(MODE == TIM1_OCMode_PWM1) || \
(MODE == TIM1_OCMode_PWM2))
#define IS_TIM1_OCM(MODE)((MODE == TIM1_OCMode_Timing) || \
(MODE == TIM1_OCMode_Active) || \
(MODE == TIM1_OCMode_Inactive) || \
(MODE == TIM1_OCMode_Toggle)|| \
(MODE == TIM1_OCMode_PWM1) || \
(MODE == TIM1_OCMode_PWM2) || \
(MODE == TIM1_ForcedAction_Active) || \
(MODE == TIM1_ForcedAction_InActive))
/* TIM1 One Pulse Mode ------------------------------------------------------*/
#define TIM1_OPMode_Single
((u16)0x0001) // 生成单一的脉冲:计数器在下一个更新事件停止 ;
#define TIM1_OPMode_Repetitive
((u16)0x0000) // 生成重复的脉冲:在更新事件时计数器不停止 ;
#define IS_TIM1_OPM_MODE(MODE) ((MODE == TIM1_OPMode_Single) || \
(MODE == TIM1_OPMode_Repetitive))
/* TIM1 Channel -------------------------------------------------------------*/
#define TIM1_Channel_1
((u16)0x0000) // 使用TIM1通道1 ;
#define TIM1_Channel_2
((u16)0x0001) // 使用TIM1通道2 ;
#define TIM1_Channel_3
((u16)0x0002) // 使用TIM1通道3 ;
#define TIM1_Channel_4
((u16)0x0003) // 使用TIM1通道4 ;
#define IS_TIM1_CHANNEL(CHANNEL) ((CHANNEL == TIM1_Channel_1) || \
(CHANNEL == TIM1_Channel_2) || \
(CHANNEL == TIM1_Channel_3) || \
(CHANNEL == TIM1_Channel_4))
#define IS_TIM1_PWMI_CHANNEL(CHANNEL) ((CHANNEL == TIM1_Channel_1) || \
(CHANNEL == TIM1_Channel_2))
#define IS_TIM1_COMPLEMENTARY_CHANNEL(CHANNEL) ((CHANNEL == TIM1_Channel_1) || \
(CHANNEL == TIM1_Channel_2) || \
(CHANNEL == TIM1_Channel_3))
/* TIM1 Clock Division CKD --------------------------------------------------*/
#define TIM1_CKD_DIV1
((u16)0x0000) // TDTS = Tck_TIM1 ;
#define TIM1_CKD_DIV2
((u16)0x0100) // TDTS = 2Tck_TIM1 ;
#define TIM1_CKD_DIV4
((u16)0x0200) // TDTS = 4Tck_TIM1 ;
#define IS_TIM1_CKD_DIV(DIV) ((DIV == TIM1_CKD_DIV1) || \
(DIV == TIM1_CKD_DIV2) || \
(DIV == TIM1_CKD_DIV4))
/* TIM1 Counter Mode --------------------------------------------------------*/
#define TIM1_CounterMode_Up
((u16)0x0000) // TIM1向上计数模式 ;
#define TIM1_CounterMode_Down
((u16)0x0010) // TIM1向下计数模式 ;
#define TIM1_CounterMode_CenterAligned1
((u16)0x0020) // TIM1中央对齐模式1计数模式 ;
#define TIM1_CounterMode_CenterAligned2
((u16)0x0040) // TIM1中央对齐模式2计数模式 ;
#define TIM1_CounterMode_CenterAligned3
((u16)0x0060) // TIM1中央对齐模式3计数模式 ;
#define IS_TIM1_COUNTER_MODE(MODE) ((MODE == TIM1_CounterMode_Up) ||
(MODE == TIM1_CounterMode_Down) || \
(MODE == TIM1_CounterMode_CenterAligned1) || \
(MODE == TIM1_CounterMode_CenterAligned2) || \
(MODE == TIM1_CounterMode_CenterAligned3))
/* TIM1 Output Compare Polarity ---------------------------------------------*/
#define TIM1_OCPolarity_High
((u16)0x0000) // TIM1输出比较极性高 ;
#define TIM1_OCPolarity_Low
((u16)0x0001) // TIM1输出比较极性低 ;
#define IS_TIM1_OC_POLARITY(POLARITY) ((POLARITY == TIM1_OCPolarity_High) || \
(POLARITY == TIM1_OCPolarity_Low))
/* TIM1 Output Compare N Polarity -------------------------------------------*/
#define TIM1_OCNPolarity_High
((u16)0x0000) // TIM1输出比较N极性高 ;
#define TIM1_OCNPolarity_Low
((u16)0x0001) // TIM1输出比较N极性低 ;
#define IS_TIM1_OCN_POLARITY(POLARITY) ((POLARITY == TIM1_OCNPolarity_High) || \
(POLARITY == TIM1_OCNPolarity_Low))
/* TIM1 Output Compare states -----------------------------------------------*/
#define TIM1_OutputState_Disable
((u16)0x0000) // 失能输出比较状态 ;
#define TIM1_OutputState_Enable
((u16)0x0001) // 使能输出比较状态 ;
#define IS_TIM1_OUTPUT_STATE(STATE) ((STATE == TIM1_OutputState_Disable) || \
(STATE == TIM1_OutputState_Enable))
/* TIM1 Output Compare N States ---------------------------------------------*/
#define TIM1_OutputNState_Disable
((u16)0x0000) // 失能输出比较N状态 ;
#define TIM1_OutputNState_Enable
((u16)0x0001) // 使能输出比较N状态 ;
#define IS_TIM1_OUTPUTN_STATE(STATE) ((STATE == TIM1_OutputNState_Disable) || \
(STATE == TIM1_OutputNState_Enable))
/* Break Input enable/disable -----------------------------------------------*/
#define TIM1_Break_Enable
((u16)0x1000) // 使能TIM1刹车输入 ;
#define TIM1_Break_Disable
((u16)0x0000) // 失能TIM1刹车输入 ;
#define IS_TIM1_BREAK_STATE(STATE) ((STATE == TIM1_Break_Enable) || \
(STATE == TIM1_Break_Disable))
/* Break Polarity -----------------------------------------------------------*/
#define TIM1_BreakPolarity_Low
((u16)0x0000) // TIM1刹车输入管脚极性低 ;
#define TIM1_BreakPolarity_High
((u16)0x2000) // TIM1刹车输入管脚极性高 ;
#define IS_TIM1_BREAK_POLARITY(POLARITY) ((POLARITY == TIM1_BreakPolarity_Low) || \
(POLARITY == TIM1_BreakPolarity_High))
/* TIM1 AOE Bit Set/Reset ---------------------------------------------------*/
#define TIM1_AutomaticOutput_Enable
((u16)0x4000) // 自动输出功能使能 ;
#define TIM1_AutomaticOutput_Disable
((u16)0x0000) // 自动输出功能失能 ;
#define IS_TIM1_AUTOMATIC_OUTPUT_STATE(STATE) ((STATE == TIM1_AutomaticOutput_Enable) || \
(STATE == TIM1_AutomaticOutput_Disable))
/* Lock levels --------------------------------------------------------------*/
#define TIM1_LOCKLevel_OFF
((u16)0x0000) // 不锁任何位 ;
#define TIM1_LOCKLevel_1
((u16)0x0100) // 使用锁电平1 ;
#define TIM1_LOCKLevel_2
((u16)0x0200) // 使用锁电平2 ;
#define TIM1_LOCKLevel_3
((u16)0x0300) // 使用锁电平3 ;
#define IS_TIM1_LOCK_LEVEL(LEVEL) ((LEVEL == TIM1_LOCKLevel_OFF) || \
(LEVEL == TIM1_LOCKLevel_1) || \
(LEVEL == TIM1_LOCKLevel_2) || \
(LEVEL == TIM1_LOCKLevel_3))
/* OSSI: Off-State Selection for Idle mode states ---------------------------*/
#define TIM1_OSSIState_Enable
((u16)0x0400) // 使能TIM1 OSSI状态 ;
#define TIM1_OSSIState_Disable
((u16)0x0000) // 失能TIM1 OSSI状态 ;
#define IS_TIM1_OSSI_STATE(STATE) ((STATE == TIM1_OSSIState_Enable) || \
(STATE == TIM1_OSSIState_Disable))
/* OSSR: Off-State Selection for Run mode states ----------------------------*/
#define TIM1_OSSRState_Enable
((u16)0x0800) // 使能TIM1 OSSR状态 ;
#define TIM1_OSSRState_Disable
((u16)0x0000) // 失能TIM1 OSSR状态 ;
#define IS_TIM1_OSSR_STATE(STATE) ((STATE == TIM1_OSSRState_Enable) || \
(STATE == TIM1_OSSRState_Disable))
/* TIM1 Output Compare Idle State -------------------------------------------*/
#define TIM1_OCIdleState_Set
((u16)0x0001) //
#define TIM1_OCIdleState_Reset
((u16)0x0000) // 当MOE=0设置TIM1输出比较空闲状态
#define IS_TIM1_OCIDLE_STATE(STATE) ((STATE == TIM1_OCIdleState_Set) || \
(STATE == TIM1_OCIdleState_Reset))
/* TIM1 Output Compare N Idle State -----------------------------------------*/
#define TIM1_OCNIdleState_Set
((u16)0x0001) //
#define TIM1_OCNIdleState_Reset
((u16)0x0000) // 当MOE=0设置TIM1输出比较N空闲状态 ;
#define IS_TIM1_OCNIDLE_STATE(STATE) ((STATE == TIM1_OCNIdleState_Set) || \
(STATE == TIM1_OCNIdleState_Reset))
/* TIM1 Input Capture Polarity ----------------------------------------------*/
TIM1_ICPolarity_Rising
((u16)0x0000) // TIM1输入捕获上升沿 ;
TIM1_ICPolarity_Falling
((u16)0x0001) // TIM1输入捕获下降沿 ;
#define IS_TIM1_IC_POLARITY(POLARITY) ((POLARITY == TIM1_ICPolarity_Rising) || \
(POLARITY == TIM1_ICPolarity_Falling))
/* TIM1 Input Capture Selection ---------------------------------------------*/
#define TIM1_ICSelection_DirectTI
((u16)0x0001) // TIM1输入2,3或4选择对应地与IC1或IC2或IC3或IC4相连 ;
#define TIM1_ICSelection_IndirectTI
((u16)0x0002) // TIM1输入2,3或4选择对应地与IC2或IC1或IC4或IC3相连 ;
#define TIM1_ICSelection_TRC
((u16)0x0003) // TIM1输入2,3或4选择与TRC相连 ;
#define IS_TIM1_IC_SELECTION(SELECTION) ((SELECTION == TIM1_ICSelection_DirectTI) || \
(SELECTION == TIM1_ICSelection_IndirectTI) || \
(SELECTION == TIM1_ICSelection_TRC))
/* TIM1 Input Capture Prescaler ---------------------------------------------*/
#define TIM1_ICPSC_DIV1
((u16)0x0000) // TIM1捕获在捕获输入上每探测到一个边沿执行一次 ;
#define TIM1_ICPSC_DIV2
((u16)0x0004) // TIM1捕获每2个事件执行一次 ;
#define TIM1_ICPSC_DIV4
((u16)0x0008) // TIM1捕获每3个事件执行一次 ;
#define TIM1_ICPSC_DIV8
((u16)0x000C) // TIM1捕获每4个事件执行一次 ;
#define IS_TIM1_IC_PRESCALER(PRESCALER) ((PRESCALER == TIM1_ICPSC_DIV1) || \
(PRESCALER == TIM1_ICPSC_DIV2) || \
(PRESCALER == TIM1_ICPSC_DIV4) || \
(PRESCALER == TIM1_ICPSC_DIV8))
/* TIM1 Input Capture Filer Value ---------------------------------------------*/
#define IS_TIM1_IC_FILTER(ICFILTER) (ICFILTER &= 0xF)
/* TIM1 interrupt sources ---------------------------------------------------*/
#define TIM1_IT_Update
((u16)0x0001) // TIM1中断源 ;
#define TIM1_IT_CC1
((u16)0x0002) // TIM1捕获/比较1中断源 ;
#define TIM1_IT_CC2
((u16)0x0004) // TIM1捕获/比较2中断源 ;
#define TIM1_IT_CC3
((u16)0x0008) // TIM1捕获/比较3中断源 ;
#define TIM1_IT_CC4
((u16)0x0010) // TIM1捕获/比较4中断源 ;
#define TIM1_IT_COM
((u16)0x0020) // TIM1 COM中断源 ;
#define TIM1_IT_Trigger
((u16)0x0040) // TIM1触发中断源 ;
#define TIM1_IT_Break
((u16)0x0080) // TIM1刹车中断源 ;
#define IS_TIM1_IT(IT) (((IT & (u16)0xFF00) == 0x0000) && (IT != 0x0000))
#define IS_TIM1_GET_IT(IT) ((IT == TIM1_IT_Update) || \
(IT == TIM1_IT_CC1) || \
(IT == TIM1_IT_CC2) || \
(IT == TIM1_IT_CC3) || \
(IT == TIM1_IT_CC4) || \
(IT == TIM1_IT_COM) || \
(IT == TIM1_IT_Trigger) || \
(IT == TIM1_IT_Break))
/* TIM1 DMA Base address ----------------------------------------------------*/
#define TIM1_DMABase_CR1
((u16)0x0000) // TIM1 CR1寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CR2
((u16)0x0001) // TIM1 CR2寄存器作为DMA传输起始 ;
#define TIM1_DMABase_SMCR
((u16)0x0002) // TIM1 SMCR寄存器作为DMA传输起始 ;
#define TIM1_DMABase_DIER
((u16)0x0003) // TIM1 DIER寄存器作为DMA传输起始 ;
#define TIM1_DMABase_SR
((u16)0x0004) // TIM1 SR寄存器作为DMA传输起始 ;
#define TIM1_DMABase_EGR
((u16)0x0005) // TIM1 EGR寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CCMR1
((u16)0x0006) // TIM1 CCMR1寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CCMR2
((u16)0x0007) // TIM1 CCMR2寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CCER
((u16)0x0008) // TIM1 CCER寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CNT
((u16)0x0009) // TIM1 CNT寄存器作为DMA传输起始 ;
#define TIM1_DMABase_PSC
((u16)0x000A) // TIM1 PSC寄存器作为DMA传输起始 ;
#define TIM1_DMABase_ARR
((u16)0x000B) // TIM1 APR寄存器作为DMA传输起始 ;
#define TIM1_DMABase_RCR
((u16)0x000C) // TIM1 RCR寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CCR1
((u16)0x000D) // TIM1 CCR1寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CCR2
((u16)0x000E) // TIM1 CCR2寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CCR3
((u16)0x000F) // TIM1 CCR3寄存器作为DMA传输起始 ;
#define TIM1_DMABase_CCR4
((u16)0x0010) // TIM1 CCR4寄存器作为DMA传输起始 ;
#define TIM1_DMABase_BDTR
((u16)0x0011) // TIM1 BDTR寄存器作为DMA传输起始 ;
#define TIM1_DMABase_DCR
((u16)0x0012) // TIM1 DCR寄存器作为DMA传输起始 ;
#define IS_TIM1_DMA_BASE(BASE) ((BASE == TIM1_DMABase_CR1) || \
(BASE == TIM1_DMABase_CR2) || \
(BASE == TIM1_DMABase_SMCR) || \
(BASE == TIM1_DMABase_DIER) || \
(BASE == TIM1_DMABase_SR) || \
(BASE == TIM1_DMABase_EGR) || \
(BASE == TIM1_DMABase_CCMR1) || \
(BASE == TIM1_DMABase_CCMR2) || \
(BASE == TIM1_DMABase_CCER) || \
(BASE == TIM1_DMABase_CNT) || \
(BASE == TIM1_DMABase_PSC) || \
(BASE == TIM1_DMABase_ARR) || \
(BASE == TIM1_DMABase_RCR) || \
(BASE == TIM1_DMABase_CCR1) || \
(BASE == TIM1_DMABase_CCR2) || \
(BASE == TIM1_DMABase_CCR3) || \
(BASE == TIM1_DMABase_CCR4) || \
(BASE == TIM1_DMABase_BDTR) || \
(BASE == TIM1_DMABase_DCR))
/* TIM1 DMA Burst Length ----------------------------------------------------*/
#define TIM1_DMABurstLength_1Byte
((u16)0x0000) // TIM1 DMA连续传送长度1字 ;
#define TIM1_DMABurstLength_2Bytes
((u16)0x0100) // TIM1 DMA连续传送长度2字 ;
#define TIM1_DMABurstLength_3Bytes
((u16)0x0200) // TIM1 DMA连续传送长度3字 ;
#define TIM1_DMABurstLength_4Bytes
((u16)0x0300) // TIM1 DMA连续传送长度4字 ;
#define TIM1_DMABurstLength_5Bytes
((u16)0x0400) // TIM1 DMA连续传送长度5字 ;
#define TIM1_DMABurstLength_6Bytes
((u16)0x0500) // TIM1 DMA连续传送长度6字 ;
#define TIM1_DMABurstLength_7Bytes
((u16)0x0600) // TIM1 DMA连续传送长度7字 ;
#define TIM1_DMABurstLength_8Bytes
((u16)0x0700) // TIM1 DMA连续传送长度8字 ;
#define TIM1_DMABurstLength_9Bytes
((u16)0x0800) // TIM1 DMA连续传送长度9字 ;
#define TIM1_DMABurstLength_10Bytes
((u16)0x0900) // TIM1 DMA连续传送长度10字 ;
#define TIM1_DMABurstLength_11Bytes
((u16)0x0A00) // TIM1 DMA连续传送长度11字 ;
#define TIM1_DMABurstLength_12Bytes
((u16)0x0B00) // TIM1 DMA连续传送长度12字 ;
#define TIM1_DMABurstLength_13Bytes
((u16)0x0C00) // TIM1 DMA连续传送长度13字 ;
#define TIM1_DMABurstLength_14Bytes
((u16)0x0D00) // TIM1 DMA连续传送长度14字 ;
#define TIM1_DMABurstLength_15Bytes
((u16)0x0E00) // TIM1 DMA连续传送长度15字 ;
#define TIM1_DMABurstLength_16Bytes
((u16)0x0F00) // TIM1 DMA连续传送长度16字 ;
#define TIM1_DMABurstLength_17Bytes
((u16)0x1000) // TIM1 DMA连续传送长度17字 ;
#define TIM1_DMABurstLength_18Bytes
((u16)0x1100) // TIM1 DMA连续传送长度18字 ;
#define IS_TIM1_DMA_LENGTH(LENGTH) ((LENGTH == TIM1_DMABurstLength_1Byte) || \
(LENGTH == TIM1_DMABurstLength_2Bytes) || \
(LENGTH == TIM1_DMABurstLength_3Bytes) || \
(LENGTH == TIM1_DMABurstLength_4Bytes) || \
(LENGTH == TIM1_DMABurstLength_5Bytes) || \
(LENGTH == TIM1_DMABurstLength_6Bytes) || \
(LENGTH == TIM1_DMABurstLength_7Bytes) || \
(LENGTH == TIM1_DMABurstLength_8Bytes) || \
(LENGTH == TIM1_DMABurstLength_9Bytes) || \
(LENGTH == TIM1_DMABurstLength_10Bytes) || \
(LENGTH == TIM1_DMABurstLength_11Bytes) || \
(LENGTH == TIM1_DMABurstLength_12Bytes) || \
(LENGTH == TIM1_DMABurstLength_13Bytes) || \
(LENGTH == TIM1_DMABurstLength_14Bytes) || \
(LENGTH == TIM1_DMABurstLength_15Bytes) || \
(LENGTH == TIM1_DMABurstLength_16Bytes) || \
(LENGTH == TIM1_DMABurstLength_17Bytes) || \
(LENGTH == TIM1_DMABurstLength_18Bytes))
/* TIM1 DMA sources ---------------------------------------------------------*/
#define TIM1_DMA_Update
((u16)0x0100) // TIM1更新DMA源 ;
#define TIM1_DMA_CC1
((u16)0x0200) // TIM1捕获/比较 1DMA源 ;
#define TIM1_DMA_CC2
((u16)0x0400) // TIM1捕获/比较 2DMA源 ;
#define TIM1_DMA_CC3
((u16)0x0800) // TIM1捕获/比较 3DMA源 ;
#define TIM1_DMA_CC4
((u16)0x1000) // TIM1捕获/比较 4DMA源 ;
#define TIM1_DMA_COM
((u16)0x2000) // TIM1 COM DMA源 ;
#define TIM1_DMA_Trigger
((u16)0x4000) // TIM1触发DMA源 ;
#define IS_TIM1_DMA_SOURCE(SOURCE) (((SOURCE & (u16)0x80FF) == 0x0000) && (SOURCE != 0x0000))
/* TIM1 External Trigger Prescaler ------------------------------------------*/
#define TIM1_ExtTRGPSC_OFF
((u16)0x0000) // TIM1 ETRP 预分频 OFF ;
#define TIM1_ExtTRGPSC_DIV2
((u16)0x1000) // TIM1 ETRP频率除以2 ;
#define TIM1_ExtTRGPSC_DIV4
((u16)0x2000) // TIM1 ETRP频率除以4 ;
#define TIM1_ExtTRGPSC_DIV8
((u16)0x3000) // TIM1 ETRP频率除以8 ;
#define IS_TIM1_EXT_PRESCALER(PRESCALER) ((PRESCALER == TIM1_ExtTRGPSC_OFF) || \
(PRESCALER == TIM1_ExtTRGPSC_DIV2) || \
(PRESCALER == TIM1_ExtTRGPSC_DIV4) || \
(PRESCALER == TIM1_ExtTRGPSC_DIV8))
/* TIM1 Internal Trigger Selection ------------------------------------------*/
#define TIM1_TS_ITR0
((u16)0x0000) // TIM1内部触发0 ;
#define TIM1_TS_ITR1
((u16)0x0010) // TIM1内部触发1 ;
#define TIM1_TS_ITR2
((u16)0x0020) // TIM1内部触发2 ;
#define TIM1_TS_ITR3
((u16)0x0030) // TIM1内部触发3 ;
#define TIM1_TS_TI1F_ED
((u16)0x0040) // TIM1 IC1连接到TI1:使用边沿探测 ;
#define TIM1_TS_TI1FP1
((u16)0x0050) // TIM1 IC1连接到TI1 ;
#define TIM1_TS_TI2FP2
((u16)0x0060) // TIM1 IC2连接到TI2 ;
#define TIM1_TS_ETRF
((u16)0x0070) // TIM1外部触发输入 ;
#define IS_TIM1_TRIGGER_SELECTION(SELECTION) ((SELECTION == TIM1_TS_ITR0) || \
(SELECTION == TIM1_TS_ITR1) || \
(SELECTION == TIM1_TS_ITR2) || \
(SELECTION == TIM1_TS_ITR3) || \
(SELECTION == TIM1_TS_TI1F_ED) || \
(SELECTION == TIM1_TS_TI1FP1) || \
(SELECTION == TIM1_TS_TI2FP2) || \
(SELECTION == TIM1_TS_ETRF))
#define IS_TIM1_INTERNAL_TRIGGER_SELECTION(SELECTION) ((SELECTION == TIM1_TS_ITR0) || \
(SELECTION == TIM1_TS_ITR1) || \
(SELECTION == TIM1_TS_ITR2) || \
(SELECTION == TIM1_TS_ITR3))
#define IS_TIM1_TIX_TRIGGER_SELECTION(SELECTION) ((SELECTION == TIM1_TS_TI1F_ED) || \
(SELECTION == TIM1_TS_TI1FP1) || \
(SELECTION == TIM1_TS_TI2FP2))
/* TIM1 External Trigger Polarity -------------------------------------------*/
#define TIM1_ExtTRGPolarity_Inverted
((u16)0x8000) // TIM1外部触发极性翻转:低电平或下降沿有效 ;
#define TIM1_ExtTRGPolarity_NonInverted
((u16)0x0000) // TIM1外部触发极性非翻转:高电平或上升沿有效 ;
#define IS_TIM1_EXT_POLARITY(POLARITY) ((POLARITY == TIM1_ExtTRGPolarity_Inverted) || \
(POLARITY == TIM1_ExtTRGPolarity_NonInverted))
/* TIM1 Prescaler Reload Mode -----------------------------------------------*/
#define TIM1_PSCReloadMode_Update
((u16)0x0000) // TIM1预分频值在更新事件装入 ;
#define TIM1_PSCReloadMode_Immediate
((u16)0x0001) // TIM1预分频值即时装入 ;
#define IS_TIM1_PRESCALER_RELOAD(RELOAD) ((RELOAD == TIM1_PSCReloadMode_Update) || \
(RELOAD == TIM1_PSCReloadMode_Immediate))
/* TIM1 Forced Action -------------------------------------------------------*/
#define TIM1_ForcedAction_Active
((u16)0x0050) // 置为OCxREF上的活动电平 ;
#define TIM1_ForcedAction_InActive
((u16)0x0040) // 置为OCxREF上的非活动电平 ;
#define IS_TIM1_FORCED_ACTION(ACTION) ((ACTION == TIM1_ForcedAction_Active) || \
(ACTION == TIM1_ForcedAction_InActive))
/* TIM1 Encoder Mode --------------------------------------------------------*/
#define TIM1_EncoderMode_TI1
((u16)0x0001) // 使用TIM1编码模式1 ;
#define TIM1_EncoderMode_TI2
((u16)0x0002) // 使用TIM1编码模式2 ;
#define TIM1_EncoderMode_TI12
((u16)0x0003) // 使用TIM1编码模式3 ;
#define IS_TIM1_ENCODER_MODE(MODE) ((MODE == TIM1_EncoderMode_TI1) || \
(MODE == TIM1_EncoderMode_TI2) || \
(MODE == TIM1_EncoderMode_TI12))
/* TIM1 Event Source --------------------------------------------------------*/
#define TIM1_EventSource_Update
((u16)0x0001) // TIM更新事件源 ;
#define TIM1_EventSource_CC1
((u16)0x0002) // TIM捕获比较 1 事件源 ;
#define TIM1_EventSource_CC2
((u16)0x0004) // TIM捕获比较 2 事件源 ;
#define TIM1_EventSource_CC3
((u16)0x0008) // TIM捕获比较 3 事件源 ;
#define TIM1_EventSource_CC4
((u16)0x0010) // TIM捕获比较 4 事件源 ;
#define TIM1_EventSource_COM
((u16)0x0020) //
#define TIM1_EventSource_Trigger
((u16)0x0040) // TIM触发事件源 ;
#define TIM1_EventSource_Break
((u16)0x0080) //
#define IS_TIM1_EVENT_SOURCE(SOURCE) (((SOURCE & (u16)0xFF00) == 0x0000) && (SOURCE != 0x0000))
/* TIM1 Update Source --------------------------------------------------------*/
#define TIM1_UpdateSource_Global
((u16)0x0000) // 生成重复的脉冲:在更新事件时计数器不停止 ;
#define TIM1_UpdateSource_Regular
((u16)0x0001) // 生成单一的脉冲:计数器在下一个更新事件停止 ;
#define IS_TIM1_UPDATE_SOURCE(SOURCE) ((SOURCE == TIM1_UpdateSource_Global) || \
(SOURCE == TIM1_UpdateSource_Regular))
/* TIM1 Ouput Compare Preload State ------------------------------------------*/
#define TIM1_OCPreload_Enable
((u16)0x0001) // TIM1在CCR1上的预装载寄存器使能 ;
#define TIM1_OCPreload_Disable
((u16)0x0000) // TIM1在CCR1上的预装载寄存器失能 ;
#define IS_TIM1_OCPRELOAD_STATE(STATE) ((STATE == TIM1_OCPreload_Enable) || \
(STATE == TIM1_OCPreload_Disable))
/* TIM1 Ouput Compare Fast State ---------------------------------------------*/
#define TIM1_OCFast_Enable
((u16)0x0001) // TIM1输出比较快速特征性能使能 ;
#define TIM1_OCFast_Disable
((u16)0x0000) // TIM1输出比较快速特征性能失能 ;
#define IS_TIM1_OCFAST_STATE(STATE) ((STATE == TIM1_OCFast_Enable) || \
(STATE == TIM1_OCFast_Disable))
/* TIM1 Ouput Compare Clear State --------------------------------------------*/
#define TIM1_OCClear_Enable
((u16)0x0001) // TIM1输出比较清除使能 ;
#define TIM1_OCClear_Disable
((u16)0x0000) // TIM1输出比较清除失能 ;
#define IS_TIM1_OCCLEAR_STATE(STATE) ((STATE == TIM1_OCClear_Enable) || \
(STATE == TIM1_OCClear_Disable))
/* TIM1 Trigger Output Source ------------------------------------------------*/
#define TIM1_TRGOSource_Reset
((u16)0x0000) // 使用寄存器TIM1_EGR的UG位作为触发输出(TRGO) ;
#define TIM1_TRGOSource_Enable
((u16)0x0010) // 使用计数器使能CEN作为触发输出(TRGO) ;
#define TIM1_TRGOSource_Update
((u16)0x0020) // 使用更新事件作为触发输出(TRGO) ;
#define TIM1_TRGOSource_OC1
((u16)0x0030) // 一旦捕获或者比较匹配发生,当标志位CC1F被设置时触发输出发送一个肯定脉冲(TRGO);
#define TIM1_TRGOSource_OC1Ref
((u16)0x0040) // 使用OC1REF作为触发输出(TRGO);
#define TIM1_TRGOSource_OC2Ref
((u16)0x0050) // 使用OC2REF作为触发输出(TRGO);
#define TIM1_TRGOSource_OC3Ref
((u16)0x0060) // 使用OC3REF作为触发输出(TRGO);
#define TIM1_TRGOSource_OC4Ref
((u16)0x0070) // 使用OC4REF作为触发输出(TRGO);
#define IS_TIM1_TRGO_SOURCE(SOURCE) ((SOURCE == TIM1_TRGOSource_Reset) || \
(SOURCE == TIM1_TRGOSource_Enable) || \
(SOURCE == TIM1_TRGOSource_Update) || \
(SOURCE == TIM1_TRGOSource_OC1) || \
(SOURCE == TIM1_TRGOSource_OC1Ref) || \
(SOURCE == TIM1_TRGOSource_OC2Ref) || \
(SOURCE == TIM1_TRGOSource_OC3Ref) || \
(SOURCE == TIM1_TRGOSource_OC4Ref))
/* TIM1 Slave Mode ----------------------------------------------------------*/
#define TIM1_SlaveMode_Reset
((u16)0x0004) // 选中触发信号(TRGI)的上升沿重初始化计数器并触发寄存器的更新 ;
#define TIM1_SlaveMode_Gated
((u16)0x0005) // 当触发信号(TRGI)为高电平计数器时钟使能
#define TIM1_SlaveMode_Trigger
((u16)0x0006) // 计数器在触发(TRGI)的上升沿开始 ;
#define TIM1_SlaveMode_External1
((u16)0x0007) // 选中触发(TRGI)的上升沿作为计数器时钟 ;
#define IS_TIM1_SLAVE_MODE(MODE) ((MODE == TIM1_SlaveMode_Reset) || \
(MODE == TIM1_SlaveMode_Gated) || \
(MODE == TIM1_SlaveMode_Trigger) || \
(MODE == TIM1_SlaveMode_External1))
/* TIM1 TIx External Clock Source -------------------------------------------*/
#define TIM1_TIxExternalCLK1Source_TI1
((u16)0x0050)
#define TIM1_TIxExternalCLK1Source_TI2
((u16)0x0060)
#define TIM1_TIxExternalCLK1Source_TI1ED
((u16)0x0040)
#define IS_TIM1_TIXCLK_SOURCE(SOURCE) ((SOURCE == TIM1_TIxExternalCLK1Source_TI1) || \
(SOURCE == TIM1_TIxExternalCLK1Source_TI2) || \
(SOURCE == TIM1_TIxExternalCLK1Source_TI1ED))
/* TIM1 Master Slave Mode ---------------------------------------------------*/
#define TIM1_MasterSlaveMode_Enable
((u16)0x0001) // TIM1主/从模式使能 ;
#define TIM1_MasterSlaveMode_Disable
((u16)0x0000) // TIM1主/从模式失能 ;
#define IS_TIM1_MSM_STATE(STATE) ((STATE == TIM1_MasterSlaveMode_Enable) || \
(STATE == TIM1_MasterSlaveMode_Disable))
/* TIM1 Flags ---------------------------------------------------------------*/
#define TIM1_FLAG_Update
((u16)0x0001) // TIM1更新标志位 ;
#define TIM1_FLAG_CC1
((u16)0x0002) // TIM1捕获/比较 1 标志位 ;
#define TIM1_FLAG_CC2
((u16)0x0004) // TIM1捕获/比较 2 标志位 ;
#define TIM1_FLAG_CC3
((u16)0x0008) // TIM1捕获/比较 3 标志位 ;
#define TIM1_FLAG_CC4
((u16)0x0010) // TIM1捕获/比较 4 标志位 ;
#define TIM1_FLAG_COM
((u16)0x0020) // TIM1 COM标志位 ;
#define TIM1_FLAG_Trigger
((u16)0x0040) // TIM1触发标志位 ;
#define TIM1_FLAG_Break
((u16)0x0080) // TIM1刹车标志位 ;
#define TIM1_FLAG_CC1OF
((u16)0x0200) // TIM1捕获/比较 1 溢出标志位 ;
#define TIM1_FLAG_CC2OF
((u16)0x0400) // TIM1捕获/比较 2 溢出标志位 ;
#define TIM1_FLAG_CC3OF
((u16)0x0800) // TIM1捕获/比较 3 溢出标志位 ;
#define TIM1_FLAG_CC4OF
((u16)0x1000) // TIM1捕获/比较 4 溢出标志位 ;
#define IS_TIM1_GET_FLAG(FLAG) ((FLAG == TIM1_FLAG_Update) || \
(FLAG == TIM1_FLAG_CC1) || \
(FLAG == TIM1_FLAG_CC2) || \
(FLAG == TIM1_FLAG_CC3) || \
(FLAG == TIM1_FLAG_CC4) || \
(FLAG == TIM1_FLAG_COM) || \
(FLAG == TIM1_FLAG_Trigger) || \
(FLAG == TIM1_FLAG_Break) || \
(FLAG == TIM1_FLAG_CC1OF) || \
(FLAG == TIM1_FLAG_CC2OF) || \
(FLAG == TIM1_FLAG_CC3OF) || \
(FLAG == TIM1_FLAG_CC4OF))
#define IS_TIM1_CLEAR_FLAG(FLAG) (((FLAG & (u16)0xE100) == 0x0000) && (FLAG != 0x0000))
/* Exported macro ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
void TIM1_DeInit(void);
void TIM1_TimeBaseInit(TIM1_TimeBaseInitTypeDef* TIM1_TimeBaseInitStruct);
void TIM1_OC1Init(TIM1_OCInitTypeDef* TIM1_OCInitStruct);
void TIM1_OC2Init(TIM1_OCInitTypeDef* TIM1_OCInitStruct);
void TIM1_OC3Init(TIM1_OCInitTypeDef* TIM1_OCInitStruct);
void TIM1_OC4Init(TIM1_OCInitTypeDef* TIM1_OCInitStruct);
void TIM1_BDTRConfig(TIM1_BDTRInitTypeDef *TIM1_BDTRInitStruct);
void TIM1_ICInit(TIM1_ICInitTypeDef* TIM1_ICInitStruct);
void TIM1_PWMIConfig(TIM1_ICInitTypeDef* TIM1_ICInitStruct);
void TIM1_TimeBaseStructInit(TIM1_TimeBaseInitTypeDef* TIM1_TimeBaseInitStruct);
void TIM1_OCStructInit(TIM1_OCInitTypeDef* TIM1_OCInitStruct);
void TIM1_ICStructInit(TIM1_ICInitTypeDef* TIM1_ICInitStruct);
void TIM1_BDTRStructInit(TIM1_BDTRInitTypeDef* TIM1_BDTRInitStruct);
void TIM1_Cmd(FunctionalState NewState);
void TIM1_CtrlPWMOutputs(FunctionalState Newstate);
void TIM1_ITConfig(u16 TIM1_IT, FunctionalState NewState);
void TIM1_DMAConfig(u16 TIM1_DMABase, u16 TIM1_DMABurstLength);
void TIM1_DMACmd(u16 TIM1_DMASource, FunctionalState Newstate);
void TIM1_InternalClockConfig(void);
void TIM1_ETRClockMode1Config(u16 TIM1_ExtTRGPrescaler, u16 TIM1_ExtTRGPolarity,
u16 ExtTRGFilter);
void TIM1_ETRClockMode2Config(u16 TIM1_ExtTRGPrescaler, u16 TIM1_ExtTRGPolarity,
u16 ExtTRGFilter);
void TIM1_ETRConfig(u16 TIM1_ExtTRGPrescaler, u16 TIM1_ExtTRGPolarity,
u16 ExtTRGFilter);
void TIM1_ITRxExternalClockConfig(u16 TIM1_InputTriggerSource);
void TIM1_TIxExternalClockConfig(u16 TIM1_TIxExternalCLKSource, u16 TIM1_ICPolarity,
u8 ICFilter);
void TIM1_SelectInputTrigger(u16 TIM1_InputTriggerSource);
void TIM1_UpdateDisableConfig(FunctionalState Newstate);
void TIM1_UpdateRequestConfig(u8 TIM1_UpdateSource);
void TIM1_SelectHallSensor(FunctionalState Newstate);
void TIM1_SelectOnePulseMode(u16 TIM1_OPMode);
void TIM1_SelectOutputTrigger(u16 TIM1_TRGOSource);
void TIM1_SelectSlaveMode(u16 TIM1_SlaveMode);
void TIM1_SelectMasterSlaveMode(u16 TIM1_MasterSlaveMode);
void TIM1_EncoderInterfaceConfig(u16 TIM1_EncoderMode, u16 TIM1_IC1Polarity,
u16 TIM1_IC2Polarity);
void TIM1_PrescalerConfig(u16 Prescaler, u16 TIM1_PSCReloadMode);
void TIM1_CounterModeConfig(u16 TIM1_CounterMode);
void TIM1_ForcedOC1Config(u16 TIM1_ForcedAction);
void TIM1_ForcedOC2Config(u16 TIM1_ForcedAction);
void TIM1_ForcedOC3Config(u16 TIM1_ForcedAction);
void TIM1_ForcedOC4Config(u16 TIM1_ForcedAction);
void TIM1_ARRPreloadConfig(FunctionalState Newstate);
void TIM1_SelectCOM(FunctionalState Newstate);
void TIM1_SelectCCDMA(FunctionalState Newstate);
void TIM1_CCPreloadControl(FunctionalState Newstate);
void TIM1_OC1PreloadConfig(u16 TIM1_OCPreload);
void TIM1_OC2PreloadConfig(u16 TIM1_OCPreload);
void TIM1_OC3PreloadConfig(u16 TIM1_OCPreload);
void TIM1_OC4PreloadConfig(u16 TIM1_OCPreload);
void TIM1_OC1FastConfig(u16 TIM1_OCFast);
void TIM1_OC2FastConfig(u16 TIM1_OCFast);
void TIM1_OC3FastConfig(u16 TIM1_OCFast);
void TIM1_OC4FastConfig(u16 TIM1_OCFast);
void TIM1_ClearOC1Ref(u16 TIM1_OCClear);
void TIM1_ClearOC2Ref(u16 TIM1_OCClear);
void TIM1_ClearOC3Ref(u16 TIM1_OCClear);
void TIM1_ClearOC4Ref(u16 TIM1_OCClear);
void TIM1_GenerateEvent(u16 TIM1_EventSource);
void TIM1_OC1PolarityConfig(u16 TIM1_OCPolarity);
void TIM1_OC1NPolarityConfig(u16 TIM1_OCNPolarity);
void TIM1_OC2PolarityConfig(u16 TIM1_OCPolarity);
void TIM1_OC2NPolarityConfig(u16 TIM1_OCNPolarity);
void TIM1_OC3PolarityConfig(u16 TIM1_OCPolarity);
void TIM1_OC3NPolarityConfig(u16 TIM1_OCNPolarity);
void TIM1_OC4PolarityConfig(u16 TIM1_OCPolarity);
void TIM1_CCxCmd(u16 TIM1_Channel, FunctionalState Newstate);
void TIM1_CCxNCmd(u16 TIM1_Channel, FunctionalState Newstate);
void TIM1_SelectOCxM(u16 TIM1_Channel, u16 TIM1_OCMode);
void TIM1_SetCounter(u16 Counter);
void TIM1_SetAutoreload(u16 Autoreload);
void TIM1_SetCompare1(u16 Compare1);
void TIM1_SetCompare2(u16 Compare2);
void TIM1_SetCompare3(u16 Compare3);
void TIM1_SetCompare4(u16 Compare4);
void TIM1_SetIC1Prescaler(u16 TIM1_IC1Prescaler);
void TIM1_SetIC2Prescaler(u16 TIM1_IC2Prescaler);
void TIM1_SetIC3Prescaler(u16 TIM1_IC3Prescaler);
void TIM1_SetIC4Prescaler(u16 TIM1_IC4Prescaler);
void TIM1_SetClockDivision(u16 TIM1_CKD);
u16 TIM1_GetCapture1(void);
u16 TIM1_GetCapture2(void);
u16 TIM1_GetCapture3(void);
u16 TIM1_GetCapture4(void);
u16 TIM1_GetCounter(void);
u16 TIM1_GetPrescaler(void);
FlagStatus TIM1_GetFlagStatus(u16 TIM1_FLAG);
void TIM1_ClearFlag(u16 TIM1_Flag);
ITStatus TIM1_GetITStatus(u16 TIM1_IT);
void TIM1_ClearITPendingBit(u16 TIM1_IT);
#endif /*__STM32F10x_TIM1_H */
/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/
源码下载: &
源码文件列表
温馨提示: 点击源码文件名可预览文件内容哦 ^_^
名称大小日期
&JLink497.00 B 13:41
&37.27 kB 16:22
&285.00 B 17:05
&1.23 kB 11:48
&USART_ram.plg174.00 B 17:11
&USART_ram.uvopt146.70 kB 13:30
&USART_ram.uvproj15.66 kB 13:22
&USART_ram_RAM.dep6.12 kB 10:10
&USART_ram_Target76.00 B 16:57
&USART_ram_uvopt.bak145.37 kB 16:22
&USART_ram_uvproj.bak15.47 kB 10:15
&6.91 kB 13:42
&28.56 kB 08:49
&3.75 kB 17:36
&1.06 kB 17:36
&23.45 kB 17:36
&22.45 kB 17:36
&2.30 kB 21:52
&2.11 kB 17:36
&21.01 kB 01:07
&8.06 kB 21:43
&12.12 kB 17:36
&6.26 kB 23:14
&1.96 kB 17:36
&9.50 kB 17:36
&2.92 kB 17:36
&19.55 kB 20:59
&6.06 kB 20:57
&13.53 kB 22:04
&18.72 kB 17:36
&14.90 kB 17:36
&16.01 kB 17:36
&3.88 kB 17:36
&3.78 kB 21:15
&3.32 kB 23:15
&32.45 kB 22:06
&18.29 kB 15:08
&4.30 kB 21:12
&16.72 kB 17:36
&3.65 kB 12:29
&18.02 kB 17:36
&14.92 kB 22:43
&3.48 kB 15:17
&52.15 kB 20:35
&39.50 kB 00:01
&3.44 kB 12:55
&15.70 kB 22:46
&2.83 kB 09:31
&59.34 kB 03:16
&11.66 kB 21:37
&31.43 kB 17:36
&4.63 kB 17:36
&16.90 kB 17:36
&5.23 kB 17:36
&33.19 kB 20:26
&9.09 kB 20:47
&33.18 kB 22:05
&40.75 kB 17:36
&22.98 kB 16:55
&45.83 kB 17:36
&28.67 kB 17:36
&6.70 kB 21:11
&9.15 kB 21:49
&29.83 kB 10:28
&11.50 kB 21:06
&44.41 kB 17:36
&12.68 kB 12:27
&38.54 kB 17:36
&35.21 kB 22:16
&7.23 kB 15:14
&132.73 kB 21:19
&116.16 kB 17:42
&43.67 kB 22:29
&8.12 kB 09:31
&USART_ram.map56.66 kB 13:41
&cortexm3_macro.lst25.63 kB 13:41
&printf_usart.map63.42 kB 10:38
&stm32f10x_vector.lst36.80 kB 13:41
&test_ku.map63.33 kB 10:02
&cortexm3_macro.d51.00 B 10:38
&cortexm3_macro.o2.45 kB 10:38
&main.crf149.78 kB 10:38
&main.d2.38 kB 10:38
&main.o170.54 kB 10:38
&printf_usart.axf85.30 kB 10:38
&49.13 kB 10:38
&printf_usart.lnp456.00 B 10:38
&printf_usart.plg3.87 kB 10:38
&printf_usart.sct479.00 B 10:28
&printf_usart.tra1.46 kB 10:38
&stm32f10x_gpio.crf41.75 kB 10:38
&stm32f10x_gpio.d615.00 B 10:38
&stm32f10x_gpio.o49.27 kB 10:38
&stm32f10x_it.crf147.44 kB 10:38
&stm32f10x_it.d2.60 kB 10:38
&stm32f10x_it.o178.80 kB 10:38
&stm32f10x_rcc.crf40.30 kB 10:38
&stm32f10x_rcc.d514.00 B 10:38
&stm32f10x_rcc.o47.54 kB 10:38
&stm32f10x_usart.crf44.85 kB 10:38
&stm32f10x_usart.d624.00 B 10:38
&stm32f10x_usart.o53.01 kB 10:38
&stm32f10x_vector.d55.00 B 10:38
&stm32f10x_vector.o5.68 kB 10:38
&test_ku.axf83.83 kB 10:02
&48.74 kB 10:02
&test_ku.lnp441.00 B 10:02
&test_ku.plg4.82 kB 10:02
&test_ku.sct479.00 B 09:27
&test_ku.tra1.42 kB 10:02
&ExtDll.iex19.00 B 13:28
&USART_ram.axf85.46 kB 13:41
&USART_ram.hex11.80 kB 13:41
&42.42 kB 13:41
&USART_ram.lnp502.00 B 13:41
&USART_ram.plg166.00 B 10:10
&USART_ram.sct479.00 B 09:23
&USART_ram.tra1.55 kB 13:41
&USART_ram_sct.Bak479.00 B 08:52
&cortexm3_macro.d51.00 B 13:41
&cortexm3_macro.o2.44 kB 13:41
&main.crf168.14 kB 13:41
&main.d1.36 kB 13:41
&main.o186.70 kB 13:41
&stm32f10x_gpio.crf42.93 kB 13:41
&stm32f10x_gpio.d381.00 B 13:41
&stm32f10x_gpio.o49.94 kB 13:41
&stm32f10x_it.crf165.71 kB 13:41
&stm32f10x_it.d1.58 kB 13:41
&stm32f10x_it.o194.27 kB 13:41
&stm32f10x_rcc.crf41.51 kB 13:41
&stm32f10x_rcc.d319.00 B 13:41
&stm32f10x_rcc.o48.26 kB 13:41
&stm32f10x_systick.crf27.78 kB 13:41
&stm32f10x_systick.d351.00 B 13:41
&stm32f10x_systick.o31.52 kB 13:41
&stm32f10x_usart.crf46.03 kB 13:41
&stm32f10x_usart.d390.00 B 13:41
&stm32f10x_usart.o53.68 kB 13:41
&stm32f10x_vector.d55.00 B 13:41
&stm32f10x_vector.o5.54 kB 13:41
&cortexm3_macro.s10.07 kB 17:36
&stm32f10x_vector.s12.57 kB 17:36
Sponsored links
23 篇源代码 21 篇源代码 18 篇源代码 13 篇源代码 9 篇源代码
285 篇源代码 173 篇源代码 48 篇源代码 42 篇源代码 36 篇源代码
登录 CodeForge
还没有CodeForge账号?
Switch to the English version?
CF仔没有找到您要的代码,请去留下您的问题吧,可能会有大神帮助你哦!
该用户暂时未开通博客
请按 Ctrl+D 键添加到收藏夹。}

我要回帖

更多关于 stm32固件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信