stm32f407 输入捕获两路方波

stm32f407 输入捕获两路方波
stm32f407 输入捕获两路方波

stm32f407 输入捕获两路方波,测下降沿时间间隔2017年08月07日18:49:23 muyepiao1阅读数:1303 标签:stm32f407输入捕获

记录调试过程:

实现方法:用TIM3,TIM4设置为输入捕获(下降沿触发),使能捕获中断,更新事件中断。

有时候两个下降沿间隔时间太久,超过溢出值,所以要开更新中断。更新中断手册上有讲:

“●发生如下事件时生成中断/DMA 请求:

—更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发)

—触发事件(计数器启动、停止、初始化或通过内部/外部触发计数)

—输入捕获

—输出比较

·(计数器溢出,UDIS =0 ) --- (生成更新事件)--- 生成(更新中断或者DMA 请求)

( URS =0 )

·计数器溢出,生成更新事件,(UDIS =1,禁止更新事件,所以此处还需UDIS =0)

·URS用来设置跟新请求源,就是用来选择哪些行为可以生成更新中断。此处URS=0;

·开始看手册时,不理解更新事件,其实不懂的时候,应该多看几遍手册,以下为手册原话:

发生更新事件时,将更新所有寄存器且将更新标志(TIMx_SR寄存器中的UIF位)置1(取

决于URS位):

●预分频器的缓冲区中将重新装载预装载值(TIMx_PSC寄存器的内容)

●自动重载影子寄存器将以预装载值进行更新

·影子寄存器存在的意义在于同步。具体可以百度。

在上是初始化设置要注意的地方。

捕获的过程描述,手册有讲,以下为来自手册:

在输入捕获模式下,当相应的ICx 信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx) 来锁存计数器的值。发生捕获事件时,会将相应的CCXIF 标志(TIMx_SR 寄存器)置1,并可发送中断或DMA 请求(如果已使能)。如果发生捕获事件时CCxIF 标志已处于高位,则会将重复捕获标志CCxOF(TIMx_SR 寄存器)置1。可通过软件向CCxIF 写入0 来给

CCxIF 清零,或读取存储在TIMx_CCRx 寄存器中的已捕获数据。向CCxOF 写入0 后会将

其清零。

要在重复捕获前,读取捕获值。由于我的输入信号是连续方波信号。重新开始一次捕获前,一定要清除中断标志位,防止误入中断。

中断处理后,要记得清标志。

清除状态寄存器

以下为TIM3初始化代码。

//捕获功能

void InitBuhuo(void)

{ TIM_ICInitTypeDef TIM_ICInitStructure;

GPIO_InitTypeDef GPIO_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

/* TIM4 clock enable *///apb1 42mhz max

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//开启定时器时钟

/* GPIOA clock enable */

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//开启PA6 io口时钟

/* TIM3 chennel1 configuration : PA.6 */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //配置io口

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; /* 选择复用功能

*/

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; /* 下拉电阻使能

*/

GPIO_Init(GPIOA, &GPIO_InitStructure);

/* Connect TIM pin to AF */

GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_TIM3);

//分频,得到定时器计算频率

//TIM_TimeBaseStructure.TIM_Prescaler=(84 -1); //定时器分频 Fenpin_Xishu = 84 1MHZ 1us

TIM_TimeBaseStructure.TIM_Prescaler=0; // 不分频

TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseStructure.TIM_Period= (0xffff); //自动重装载值

TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;

TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); //初始化定时器

//初始化TIM3输入捕获参数

TIM3_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 选择输入端 IC1映射到TI1上

// TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;

//上升沿捕获

TIM3_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling; //捕获下降沿

TIM3_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上

TIM3_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,

不分频

TIM3_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 配置输入滤波器不滤波

TIM_ICInit(TIM3, &TIM3_ICInitStructure);

/* Enable the TIM3 global Interrupt */

NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

//开中断前,清中断标志位

TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位//允许中断更新中断捕获中断

TIM_ITConfig(TIM3, TIM_IT_Update|TIM_IT_CC1, ENABLE);

// /* TIM enable counter */

TIM_Cmd(TIM3, ENABLE);

}void TIM3_IRQHandler(void)

{

if(TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)//捕获1发生捕获事件 {

}

if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)//是否发生更新事件 {

}

TIM_ClearITPendingBit(TIM3, TIM_IT_CC1|TIM_IT_Update); //清除中断标志位}

stm32f407 输入捕获两路方波

stm32f407 输入捕获两路方波,测下降沿时间间隔2017年08月07日18:49:23 muyepiao1阅读数:1303 标签:stm32f407输入捕获 记录调试过程: 实现方法:用TIM3,TIM4设置为输入捕获(下降沿触发),使能捕获中断,更新事件中断。 有时候两个下降沿间隔时间太久,超过溢出值,所以要开更新中断。更新中断手册上有讲: “●发生如下事件时生成中断/DMA 请求: —更新:计数器上溢/下溢、计数器初始化(通过软件或内部/外部触发) —触发事件(计数器启动、停止、初始化或通过内部/外部触发计数) —输入捕获 —输出比较 ” ·(计数器溢出,UDIS =0 ) --- (生成更新事件)--- 生成(更新中断或者DMA 请求) ( URS =0 ) ·计数器溢出,生成更新事件,(UDIS =1,禁止更新事件,所以此处还需UDIS =0) ·URS用来设置跟新请求源,就是用来选择哪些行为可以生成更新中断。此处URS=0; ·开始看手册时,不理解更新事件,其实不懂的时候,应该多看几遍手册,以下为手册原话: 发生更新事件时,将更新所有寄存器且将更新标志(TIMx_SR寄存器中的UIF位)置1(取 决于URS位): ●预分频器的缓冲区中将重新装载预装载值(TIMx_PSC寄存器的内容) ●自动重载影子寄存器将以预装载值进行更新

·影子寄存器存在的意义在于同步。具体可以百度。 在上是初始化设置要注意的地方。 捕获的过程描述,手册有讲,以下为来自手册: 在输入捕获模式下,当相应的ICx 信号检测到跳变沿后,将使用捕获/比较寄存器(TIMx_CCRx) 来锁存计数器的值。发生捕获事件时,会将相应的CCXIF 标志(TIMx_SR 寄存器)置1,并可发送中断或DMA 请求(如果已使能)。如果发生捕获事件时CCxIF 标志已处于高位,则会将重复捕获标志CCxOF(TIMx_SR 寄存器)置1。可通过软件向CCxIF 写入0 来给 CCxIF 清零,或读取存储在TIMx_CCRx 寄存器中的已捕获数据。向CCxOF 写入0 后会将 其清零。 要在重复捕获前,读取捕获值。由于我的输入信号是连续方波信号。重新开始一次捕获前,一定要清除中断标志位,防止误入中断。 中断处理后,要记得清标志。 清除状态寄存器 以下为TIM3初始化代码。 //捕获功能 void InitBuhuo(void) { TIM_ICInitTypeDef TIM_ICInitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

DSP程序烧写步骤

一、连接好DSP电源及仿真器(设备管理器中能检测到仿真器) 二、点击桌面图标

三、选择对应的仿真器和DSP(图中已经选好了,直接保存并退出) “确认”

四、进入仿真界面,此时系统与目标板还未连接 在“Debug”中选择“Connect”将系统与目标板连接

五、如图,右键“Projects”,载入工程文件 工程文件目录为文件目录为C:\CCStudio_v3.3\MyProjects\DSP2812M_examples\DPS2812M_KEYBOARD (图中,点击后直接进入工程目录,此时直接选中.pjt文件并打开即可)

六、打开后界面如下: 注意:工程中的“F2812.cmd”文件(如下图所示)为烧写程序时用的cmd文件,编译及调试程序时用的cmd文件为“F2812_EzDSP_RAM_lnk.cmd”,两者均在目录C:\CCStudio_v3.3\MyProjects\DPS2812M_common\cmd下,如下图中所示:

“F2812.cmd”文件和“F2812_EzDSP_RAM_lnk.cmd”文件所在目录如下: 如果从调试程序到烧写程序或者相反过程,都需要更换cmd文件,更换后一定要先编译cmd 文件后才能避免出现问题 七、烧写程序 烧写程序即是将编译及调试正确的程序(.out文件)烧写到Flash中,本实验烧写的是DPS2812M_KEYBOARD.out文件,其目录为C:\CCStudio_v3.3\MyProjects\DSP2812M_examples\DPS2812M_KEYBOARD\Debug 选择“Tools”下的“F28xx on-chip flash programmer”,如下图:

使用STM32的定时器进行输入脉冲的计数

使用STM32的定时器进行输入脉冲的计数STM32的定时器具有计数功能,在实际应用中可以用来对引脚上的输入信号进行统计。其输入信号作为计数时钟,输入引脚为ETR引脚。 本例程使用Timer 2,其ETR输入引脚为PA1,初始化是设置该引脚工作模式为输入模式,Timer2的工作模式为从模式。 为了方便测试,另外使用PC6模式输出一个时钟信号。测试时将PC6与PA1短接。(用户也可另外连接一个时钟信号到PA1引脚上。) 代码如下: int main(void) { unsigned char i_Loop; unsigned char n_Counter; #ifdef DEBUG debug(); #endif RCC_Configuration(); // System Clocks Configuration NVIC_Configuration(); // NVIC configuration GPIO_Configuration(); // Configure the GPIO ports TIM_TimeBaseStructure.TIM_Period = 0xFFFF;

TIM_TimeBaseStructure.TIM_Prescaler = 0x00; TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // Time base configuration TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInver ted,0); TIM_SetCounter(TIM2, 0); TIM_Cmd(TIM2, ENABLE); for(i_Loop = 0; i_Loop < 100; i_Loop ++) { GPIO_SetBits(GPIOC, GPIO_Pin_6); Delay(10); GPIO_ResetBits(GPIOC, GPIO_Pin_6); Delay(10); } n_Counter = TIM_GetCounter(TIM2); while (1) {}

Fresscale MCU 烧录方法

Fresscale MCU 烧录方法 Fresscale 的MCU 常用的烧录方法有两种常用的烧录方法有两种。。一、使用CodeWarrior 编译环境建立工程后在线烧录。二、安装CodeWarrior 时自动会安装烧录软件HIWARE.EXE ,运行该烧录软件运行该烧录软件,,可在没有工程的境况下直接烧录可在没有工程的境况下直接烧录机器码机器码.S19文件文件。。 方法一的烧录步骤如下方法一的烧录步骤如下:: 步骤一步骤一::按照图一正确连接电路按照图一正确连接电路,,转换小板的 4Pin 排序如图所示排序如图所示,,转换小板和目标板之间可根据实际情况更改连接方式板和目标板之间可根据实际情况更改连接方式。。 图一 步骤二步骤二::PE 和电脑连接后和电脑连接后,,蓝灯亮蓝灯亮。。给目标板上电后给目标板上电后,,黄灯亮黄灯亮。。打开CodeWarrior 编译环境编译环境,,编译无误后编译无误后,,点击Debug 。 图二 负极正极 PE 转接板VCC GND RST BGND Compile Debug

步骤三步骤三::点击Debug 后,跳出仿真页面跳出仿真页面,,等待代码烧写完成关闭仿真页面等待代码烧写完成关闭仿真页面,,程序烧录完毕程序烧录完毕。。 图三 方法二的烧录步骤方法二的烧录步骤:: 步骤一步骤一::按方法一步骤一连接PE 并上电并上电。。 步骤二步骤二::打开CodeWarrior 的安装文件夹的安装文件夹,,找到Prog 文件夹文件夹。。 图四

步骤三步骤三::打开Prog 文件夹文件夹,,找到HIWARE.EXE 并双击运行 图五 步骤四步骤四::选择Component----Set connection 。 图六

STM32_DAC 实验(正弦波_方波_锯齿波_发生器)

/*---------------------------------------------------------------------------- * 开发者:红芯电子_飞哥 * 功能:STM32 DAC 数模转换(正弦波/矩形波/锯齿波)输出实验 * 说明:按SW5 输出正弦波/ 按SW4 输出矩形波/ 按SW3 输出锯齿波, 输出端口PA4 * 网址:https://www.360docs.net/doc/0e13834828.html, *----------------------------------------------------------------------------*/ #include #include // STM32F10x Library Definitions #include "STM32_Reg.h" // STM32 register and bit Definitions #include "STM32_Init.h" // STM32 Initialization #include "common.h" #include "sine_wave_1024.h" // 输出端口: PA4 #define SINE_W A VE 1//sine 正弦波 #define RECT_W A VE 2//rectangular 矩形波 #define HACKLE_WA VE 3//hackle 锯齿波 UINT8 flag = 0; UINT8 func = SINE_W A VE; /*---------------------------------------------------------------------------- MAIN function *----------------------------------------------------------------------------*/ int main (void) { UINT16 i = 0; UINT32 *pDAC_BASE = (UINT32 *)DAC_BASE; stm32_Init(); // STM32 setup LED_Init(); //打开DAC时钟使能,请参考STM32_Ref_Manul.pdf 第105页 RCC->APB1ENR |= (UINT32)(1 << 29); //设置DAC控制参数,请参考STM32_Ref_Manul.pdf 第260页,里面有对该寄存器中每一位的介绍 *(pDAC_BASE + 0x00) = (0x01 << 0)| (0x00 << 2) | (0x04 << 3) | (0x03 << 6) | (0x0b << 8); *(pDAC_BASE + 0x04) = 0x01;

程序烧录工艺

程序烧录工艺 一、目的:规范模块烧录操作程序,使烧录过程标准化。 二、烧录设备: 硬件 计算机一台 烧录驱动板一块 计算机与烧录驱动板连线一根 烧录线一根 软件 USB转串口驱动软件(已安装)一套 烧录程序(已安装)一套 模块程序 三、烧录过程 1.连接方法如图1所示 图1 2.打开计算机,使计算机处于正常工作状态,用鼠标双击桌面DIR K150 烧录程序图标,运行烧录程序; 3.进入图2界面

图2 在红圈内显示具体COM口序号时,连接正常,如果红圈内显示COMX并弹出图3窗口时,应检查连线是否正常牢固连接,USB转串口驱动软件有没有运行,检查完毕,点击“文件”→“选择串口”→“输入串口编号”→“x”→点击“ok”,如图4,当界面返回到图2状态,红圈内出现串口数值时,进入下一道工序。 图3

图4 4.载入模块程序,操作方法如图5所示。点击“载入”→“查找范围”→“模块程序”→“打开”,进入图6界面。 图5

图6 5.模式设置:点击“设置”→在下拉窗口中选择“ICSP模式(I)”,界 面如图7所示。 图7 6.配置位设置:点击图8红圈“配置位”→弹出图9窗口,将掉电监测选 择为“开”如图10→点击“ok”,返回图7界面。

图8 7.将烧录线与模块相连,正确方法如图1所示,点击“”→ 选择弹出窗口图11中的“擦除”→并点击“ok”→点击弹出窗口图 12中的“”→点击弹出窗口图13中的“ok”返回图7界面。 图9 图10

图11 图12 图13 8.点击“”→选择弹出窗口图13中的“”→点击 新弹出窗口图14中的“”→进入图15中的界面,等待10秒左右,当弹出图16界面时,点击“”返回图7界面。 9.该模块板程序烧录完成,去除模块板连线,放入合格品箱内,烧录不成 功的,做好不合格标记,放在不合格处,维修后,重新烧录。 敏旺科技品质保证部 2014-4-21

STM32单片机定时器调试之方波输出

STM32单片机定时器调试之方波输出 今天试着让STM32的定时器输出50%占空比信号,按 照例程写了一下方波初始化函数,例程用的是STM32自 带库函数,由于嫌麻烦,我又自己写了一个简单的,采 用定时器1进行输出。结果一上来,没反应,修改了很 多参数,还是没反应,然后将开发板例程写进芯片后, 有反应,仔细越多数据手册,没有问题,纠结一上午, 中午吃饭。吃完饭后,下午又开始试验,还是别人程序 有反映,自己程序,没反应。再看了看,开发板程序使 用的是TIM3,而我使用的是TIM1,于是又把我的程序将TIM1换成TIM3,点击调试运行,有反应。不会是高级 定时器只能干高级的任务吧,像输出方波这么简单的低 级任务他不惜的干?郁闷了半天。后来通过在网上查找,这个程序 以下为源代码,CC1进行比较输出,模式为翻转电平. 程序运行后,CC中断可以进去,PA.11的指示灯能闪, 但PA.08的指示一直为低电平,请教一下程序哪里错了??? void TIM1_CC_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure;

/* 使能定时器 TIM1_CC 中断 */ NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPrior ity = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* 配置 PA.11 为推挽输出 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIOA->;BSRR = GPIO_Pin_11; // 将PA.08配置为高电平 /* 配置 PA.08 为复用推挽输出 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* 预分频自动重载寄存器 */

STM32的捕获模式应用

STM32捕获模式应用。。。。。 1、stm32脉冲方波捕获 脉冲方波长度捕获 a)目的:基础PWM输入也叫捕获,以及中断配合应用。使用前一章的输出管脚P B1(19脚),直接使用跳线连接输入的PA3(13脚),配置为TIM2_CH4,进行实验。 b)对于简单的PWM输入应用,暂时无需考虑TIM1的高级功能之区别,按照目前我的应用目标其实只需要采集高电平宽度,而不必知道周期,所以并不采用PWM 输入模式,而是普通脉宽捕获模式。 c)初始化函数定义: void TIM_Configuration(void); //定义TIM初始化函数 d)初始化函数调用: TIM_Configuration(); //TIM初始化函数调用 e)初始化函数,不同于前面模块,TIM的CAP初始化分为三部分——计时器基本初始化、通道初始化和时钟启动初始化: void TIM_Configuration(void)//TIM2的CAP初始化函数 { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定时器初始化结构 TIM_ICInitTypeDef TIM_ICInitStructure; //通道输入初始化结构 //TIM2输出初始化 TIM_TimeBaseStructure.TIM_Period = 0xFFFF; //周期0~FFFF TIM_TimeBaseStructure.TIM_Prescaler = 5; //时钟分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//模式

ICD3烧录步骤

ICD3烧录步骤 1、 在进行烧录之前必须安装MicroChip 公司的编程软件MPLAB IDE : !*+.L0MNOPQNR yes ”然后重启电脑。 3、 将ICD3调试器的引线连接好,引线中USB 接口的为连接电脑的数据线,六条细线的连 接口为调试口,图片如下: 点击此链 接下载

4、连接好ICD3的两条线,将UBS线接头插入电脑USB接口,第一次使用ICD3屏幕右下 方会出现其驱动标志然后会跳出对话框要求我们完成硬件驱动向导,单击下一步系统直到完成ICD3驱动程序的安装,然后单击“完成”按钮来完成驱动程序的安装。(备注:安装ICD3驱动之前必须先安装MPLAB IDE,因为ICD3的系统驱动在给软件的文件夹里) 5、在打开我们的编程软件之前,必须检查,需要编译调试或烧录的程序不能放于桌面而且 程序的文件夹路径不能含有中文,注意这些事项后双击打开MPLAB IDE软件

6、单击

9、设置完毕后单击:programmer→Reconnect 在出现的的对话框中点击“OK”进行重新连 接,连接完成后如果没有问题则会出现如下的画面,如果出现警告则需拔掉所有的连接线按步骤重新连接设置。 10、连接成功后就可以开始烧录,(以下步骤一定要按顺序完成)点击图标: 进行烧录。烧录成功后则拔掉PCB板,若还要烧录其他PCB则插入新的PCB按照步骤10反复烧录。全部烧录完成后则点击programmer→select programmer→none关闭ICD3烧录功能,并拔掉所有连接。录成功后会屏幕会出现如下图:

点击如下标注点察除芯片内的程序: 点击如下标注点执行烧录察除成功标志 单击此图标 擦除芯片 单击此图标 执行烧录

STM32F4_TIM输入波形捕获(脉冲频率)

本文在前面文章“STM32基本的计数原理”的基础上进行拓展,讲述关于“定时器输入捕获”的功能,和上一篇文章“定时器比较输出”区别还是挺大的。在引脚上刚好相反:一个输入、一个输出。 本文只使用一个TIM5通道3(也可其他通道)捕获输入脉冲的频率,通过捕获两次输入脉冲的间隔时间来计算脉冲波形的频率。间隔一定时间读取频率并通过串口打印出来。 当然也可通过两路通道捕获脉冲信号的占空比,计划后期整理。 笔者通过信号发生器产生信号,上位机串口助手显示捕获的脉冲频率。(没有信号发生器的朋友可以结合上一篇文章PWM输出做信号源:在同一块板子上也可以使用不同定时器,将输出引脚接在输入引脚) 先看一下实例的实验现象: 关于本文的更多详情请往下看。 Ⅱ、实例工程下载 笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。 笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。 提供下载的软件工程是STM32F417的,但F4其他型号也适用(适用F4其他型号:关注微信,回复“修改型号”)。 STM32F4_TIM输入波形捕获(脉冲频率)实例:

https://https://www.360docs.net/doc/0e13834828.html,/cB6XrSi6rK3TP 访问密码 STM32F4资料: https://https://www.360docs.net/doc/0e13834828.html,/cR2pxqF5x2d9c 访问密码53e7 Ⅲ、原理描述 笔者将TIM分为三大块:时基部分、比较输出和输入捕获,请看下面截图“通用TIM框图”。 前面的文章已经将“时基部分”的一些基础知识讲述过了,“时基部分”的功能是比较有用的,它除了可以用来延时(定时)之外,它还可以拿来触发其他一些功能,如:触发DA转换、AD采集等。 上一篇文章讲述的就是图中比较输出部分,比较输出部分功能相对比较简单。 该文主要讲述“输入捕获”部分,这部分输入的通道1与2、通道3与4可以相互协作。该文只使用了TIM5的通道3,捕获输入信号频率。 通用TIM框图: 上面两图截取“STM32F4x5、x7参考手册”建议下载手册参看。 Ⅳ、源代码分析 笔者以F4标准外设库(同时也建议初学者使用官方的标准外设库)为基础建立的工程,主要以库的方式来讲述。

STM32输入捕获模式

输入捕获模式 库函数例程位置:STM32F10x_StdPeriph_Lib_V3.3.0\Project\STM32F10x_StdPeriph_Examples\TIM\I nputCapture 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。 在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。PWM输入模式 库函数例程位置:STM32F10x_StdPeriph_Lib_V3.3.0\Project\STM32F10x_StdPeriph_Examples\TIM\P WM_Input 该模式是输入捕获模式的一个特例 例如,你需要测量输入到TI1上的PWM信号的长度(TIMx_CCR1寄存器)和占空比(TIMx_CCR2寄存器),具体步骤如下(取决于CK_INT的频率和预分频器的值) ● 选择TIMx_CCR1的有效输入:置TIMx_CCMR1寄存器的CC1S=01(选择TI1)。 ● 选择TI1FP1的有效极性(用来捕获数据到TIMx_CCR1中和清除计数器):置CC1P=0(上升沿有效)。 ● 选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择TI1)。 ● 选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)。 ● 选择有效的触发输入信号:置TIMx_SMCR寄存器中的TS=101(选择TI1FP1)。 ● 配置从模式控制器为复位模式:置TIMx_SMCR中的SMS=100。 ● 使能捕获:置TIMx_CCER寄存器中CC1E=1且CC2E=1。 由于只有TI1FP1和TI2FP2连到了从模式控制器,所以PWM输入模式只能使用TIMx_CH1 /TIMx_CH2信号。 强置输出模式 在输出模式(TIMx_CCMRx寄存器中CCxS=00)下,输出比较信号(OCxREF和相应的OCx)能够直接由软件强置为有效或无效状态,而不依赖于输出比较寄存器和计数器间的比较结果。 例如:CCxP=0(OCx高电平有效),则OCx被强置为高电平。置TIMx_CCMRx 寄存器中的OCxM=100,可强置OCxREF信号为低。 输出比较模式 此项功能是用来控制一个输出波形,或者指示一段给定的的时间已经到时。当计数器与捕获/比较寄存器的内容相同时,输出比较功能做如下操作: ● 将输出比较模式(TIMx_CCMRx寄存器中的OCxM位)和输出极性(TIMx_CCER 寄存器中的CCxP位)定义的值输出到对应的引脚上。在比较匹配时,输出引脚可以保持它的电平(OCxM=000)、被设置成有效电平(OCxM=001)、被设置成无效电平(OCxM=010)或进行翻转(OCxM=011)。 ● 设置中断状态寄存器中的标志位(TIMx_SR寄存器中的CCxIF位)。 ● 若设置了相应的中断屏蔽(TIMx_DIER寄存器中的CCxIE位),则产生一个中断。 ● 若设置了相应的使能位(TIMx_DIER寄存器中的CCxDE位,TIMx_CR2寄存器

刻录光盘具体步骤

刻录光盘的具体步骤,详见以下: 用Nero轻松刻录光盘 Nero Burning ROM (以下简称Nero)是一款非常优秀的刻录软件,不仅操作简单,功能也非常强大,是刚接触光盘刻录用户的首选刻录软件。 软件基本信息软件名称:Nero Burning ROM 最新版本:5.5.8.2 软件大小:11.4MB 软件性质:共享软件 适用平台:Wind 9X/Me/2000/XP 下载网址:https://www.360docs.net/doc/0e13834828.html,/eng/index.html 先安装英文版软件,接着将中文包解压缩到Nero的安装目录下载后,即完成了中文包的安装。 一、刻录普通数据光盘 1.选择光盘类型 将需要刻录的文件拷贝到一个新文件夹中(如临时刻录文件夹),将刻录盘(CD-R 或CD-RW)插入刻录机。启动Nero,首先出现的是'Nero向导”。 我们选择“编辑新的光盘”。然后按照提示依次选择“数据光盘→编辑新的数据光盘”,此时Nero向导提示我们点击“完成”进入主界面。 提示:建议刻录前对C盘与D盘进行一次磁盘检查与整理的操作,并用杀毒软件对系统进行扫描。 2.编辑刻录文件 Nero的主界面除了标题栏、菜单栏、工具栏之外,中间那两个类似资源管理器的窗口便是工作区——左边的窗口是刻录窗口,右边的窗口是“文件浏览器”,只要在该窗口中找到要刻录的文件,然后拖放到左边的刻录窗口,便完成了刻录光盘的编辑工作。

以刻录D盘“临时刻录文件夹”中的数据为例,首先我们在“文件浏览器”中展开D 盘,选中“临时刻录文件夹”,此时“文件浏览器”右边的窗口栏中便出现了该文件中所有的文件。 然后在“文件浏览器”中选中需要刻录的文件,按住鼠标左键不放,将其拖放到主界面最左边的那个“刻录窗口”中就行了。 提示:也可以在“文件浏览器”中右键单击要刻录的文件或文件夹,选择右键菜单中的“复制”,然后将鼠标移到“刻录窗口”,右键单击该窗口的空白区域,选择右键菜单中的“粘贴”。 当我们往“刻录窗口”添加文件时,主界面下面的信息栏还有一条变化的蓝色线条,它显示的就是当前“刻录窗口”中所有文件的总容量。 由于目前大部分刻录盘的容量都是650MB,所以信息栏的“650MB”处有一条黄色的标示线;不过市场上也有部分刻录盘的容量为700MB(普通刻录盘的极限容量),所以信息栏的“700MB”处有一条红色的警告线。 如何确定刻录盘的容量呢?首先可通过刻录盘的性能标示来确定,一般刻录盘都标有“650MB”或“700MB”等字样;另外也可通过Nero来检测:点击菜单栏中的“刻录机”,选择下拉菜单中的“光盘信息”(快捷键:Ctrl+I),很快就会弹出一个信息窗口。 3.正式刻录 编辑好刻录文件之后即可开始正式刻录:点击工具栏上的(刻录)按钮,或者点击“文件→写入光盘”,便进入了刻录界面。 Nero给了我们三个选择: 测试:由Nero对刻录进行模拟操作,以便检查待刻文件是否有数据错误; 测试并刻录:先对待刻文件进行模拟刻录,如没有错误的话则正式刻录; 刻录:不进行模拟刻录直接刻录。为保证成功刻录,建议选择“测试并刻录”。 提示:当Nero进行刻录时,一定得等到Nero弹出一个“刻录完毕”的信息窗口才能确认刻录完成,中途不要去按刻录机的退盘按钮。 二、刻录音乐CD光盘

stm32F1外部脉冲计数(库函数实现)

主函数 #include "stm32f10x.h" #include "timer.h" #include "led.h" #include "delay.h" #include "oled.h" #include "sys.h" int main(void) { u16 t=0; delay_init(); LED_Init(); TIM3_PWM_Init(9999,719); TIM2_Excnt_Init(10); OLED_Init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); OLED_ShowString(20,0,"EXCNT_TEST",16); OLED_Refresh_Gram(); TIM_SetCompare2(TIM3,1000); while(1) { delay_ms(1);

t=TIM_GetCounter(TIM2); OLED_ShowNum(20,30,t,6,16); OLED_Refresh_Gram(); } } timer.c #include "timer.h" #include "led.h" #include "usart.h" #include "oled.h" void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDefGPIO_InitStructure; TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure; TIM_OCInitTypeDefTIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,

STM32 波形采集、存储与回放

波形采集、存储与回放系统设计 摘要 本设计是基于数字示波器的原理,以STM32-cortex-m3作为控制芯片,把波形采集分为A、B两个通道,对A通道的输入信号进行衰减,对B通道的输入信号进行放大,然后采用内部集成的高速AD对信号进行实时采样,方式为上升沿内触发,可以实现波形的单次和多次触发存储和回放显示,以及频率、周期、峰-峰值的测量和显示,并具有掉电存储功能。由信号采集、数据处理、波形显示,控制面板等功能模块组成,整个系统分成A/D转换部分、D/A转换部分、波形存储部分、键盘输入控制四大部分,系统操作简便,输出波形可以在示波器输出显示,此存储示波器即具有一般示波器实时采样实时显示的功能,又可以对某段波形进行即时存储和连续回放显示,且界面友好,达到了较好的性能指标。具体设计原理以及过程在下面章节中详细说明。 关键字:STM32、波形采集、波形存储、波形回放

Abstract The design is based on the principle of digital oscilloscope, with STM32-cortex-m3 as the control chip, the waveform acquisition is divided into A, B two channel, the A channel input signal attenuation on B channel, the input signal is amplified, then using the internal integration of high-speed AD on real time data sampling, as rising edge trigger, can achieve waveform of single and multiple triggers the storage and playback and display, frequency, cycle, peak to peak value measurement and display, and power failure memory function. The signal acquisition, data processing, waveform display, the control panel and other functional modules, the system is divided into A/D transformation, D/A converting part, waveform storage, keyboard input control system four parts, simple operation, the output waveform can be output in the oscilloscope display, this storage oscilloscope namely has the common oscilloscope real-time sampling real time display function, can be a real-time storage and continuous playback waveform display, and friendly interface, has achieved good performance. The design principle and process are described in detail in the following sections. Keywords: STM32, waveform acquisition, storage, waveform waveform playback

stm32的定时器输入捕获与输出比较讲解

stm32的定时器输入捕获与输出比较 (2015-09-28 09:26:24) 转载▼ 分类:stm32 标签: it 明确一点对比AD的构造,stm32有3个AD,每个AD有很多通道,使用哪个通道就配置成哪个通道,这里定时器也如此,有很多定时器TIMx,每个定时器有很多CHx(通道),可以配置为输入捕捉-------测量频率用,也可以配置为输出比较--------输出PWM使用 输入捕捉:可以用来捕获外部事件,并为其赋予时间标记以说明此事件的发生时刻。 外部事件发生的触发信号由单片机中对应的引脚输入(具体可以参考单片机的datasheet),也可以通过模拟比较器单元来实现。 时间标记可用来计算频率,占空比及信号的其他特征,以及为事件创建日志,主要是用来测量外部信号的频率。 输出比较:定时器中计数寄存器在初始化完后会自动的计数。从bottom计数到top。并且有不同的工作模式。 另外还有个比较寄存器。一旦计数寄存器在从bottom到top计数过程中与比较寄存器匹配则会产生比较中断(比较中断使能的情况下)。 然后根据不同的工作模式计数寄存器将清零或者计数到top值。

1、朋友,可以解释一下输入捕获的工作原理不? 计数寄存器的初值,是自己写进去的吗? 我如果捕获上升沿,两个值相减,代表的时两个上升沿中间那段电平的时间。对不? timer1有五个通道(对应五个IO引脚),在同一时刻,只能捕获一个引脚的值,对不? 那输出比较的原理你可以帮我介绍一下不?

比较单元的值是人为设进去的吧? 上面这个总看不懂,好像不不止你说的那几种情况:“匹配了是io电平取反、变低、还是变高,就会产生不同的波形了” 设置输出就是置1,清除输出就是置0,切换输出就是将原来的电平取反,对不? 011:计数器向上计数达到最大值时将引脚置1,达到0时,引脚电平置0,,对不?

CCS3.3程序烧录过程

CCS3.3程序烧录步骤 编写: 1. 概述 此文档用于说明使用TI公司CCS3.3软件烧录主控插件DSP28335芯片程序的过程,请细致阅读此文档并按照文档描述的步骤进行程序烧录,非正确的的烧录步骤可能会导致28335芯片的锁死。 2. 需要的工具 电脑(预装CCS3.3工程软件); 仿真器SEED-XDS510PLUS; 3. 程序烧录步骤 1)主控机箱断电,将仿真器SEED-XDS510PLUS小心的插至主控板的DSP烧录脚(两排共14针,其中1针被剪断,仿真器对应位置的孔也被堵死);仿真器另一端插至电脑的 USB口。 2)双击桌面图标CCStudiov3.3,或者通过“开始----程序----Texas Instruments----Code Composer Studio 3.3”打开CCS软件,图标如下图1所示 图1 CCS3.3桌面图标图2 CCS设置图标注意:如果是首次使用CCS3.3需要通过Setup CCStudiov3.3对CCS进行设置,配置过程如下:a)双击桌面图标Setup CCStudiov3.3进入设置界面,桌面图标如图2所示;b)CCS配置界面如图3所示,在中间框内Family选择“C28xx”,在Plat…中选择“SEEDXDS510PLUS”,在筛选出来的系列中单击选择“F28335 SEEDXDS510 PLUS Emulator”,点击左下角“Add”按钮,可以发现左侧出现DSP和芯片信息;c)点击“Save & Quit”;d)提示对话框会询问是否启动Code Composer Studio,选择“是”可直接启动Code Composer Studio。 图3 CCS配置界面

烧录器件的步骤

通用编程器-->烧录器件的步骤 硬件准备 在您确保正确安装了通用编程器应用软件,以及USB驱动程序之后,连接好电源适配器及USB通讯线。此时编源指示灯亮指示连接正常(点亮状态),绿色编程结果指示灯指示等待编程(点亮状态),通用编程器应用软件右下方通通信正常(绿色)。 按编程器锁紧座旁所标示方式正确放置芯片(注意:某些芯片编程时需要相应适配器,在选择器件后会弹出的框进行提示)如果出现芯片反放或错放情况,通用编程器的管脚检测功能将加以提示(仅在EasyPRO800,EasyPRO500 选择器件 在以上条件都具备的情况下,您就可以对您手中的芯片进行编程操作了!单击快捷工具栏中“选择”按钮或选择片”下的“选择芯片(F2)”,弹出器件选择窗口(参考应用软件的用户界面)。 n首先应在"类型"栏中选择器件类型,如ALL,MCU,Serial EEPRO,E(E)PROM/FLASH,SRAM或PLD/GAL。 n然后在"厂商"选项栏中选择厂家,并在右侧出现的"器件"选项栏中选择器件,或者在搜索栏输入器件名器件库中快速的搜索到您想要的器件。 n选择器件后,按“选择”按钮或者双击器件名选中器件。此时"选择器件"对话框自动关闭,回到用户操作界面下方信息栏中将提示您所选器件的基本信息,可以此作为对芯片信息的提示。 【提示】:

将数据装入缓冲区 只有将所需要烧写到芯片的数据装载到数据缓冲区,才能执行编程操作。点击菜单工具栏中的“打开”按钮择对话框。 从中选择文件格式,调入方式,调入地址,并可选择是否在调入前清空缓冲区,调入后弹出结果信息。设定后按钮,此时将出现提示对话框对您所进行选择进行提示。根据提示确定无误后,点“确定”按钮,则需编程数据将区,并出现在用户界面的数据缓冲区内。 设置芯片配置信息及加密选项 如果您需要对所编程芯片进行加密或其他配置操作,请选择快捷工具栏中的“配置”按钮,弹出配置栏对话因芯片不同而不同。例如当所选芯片为P89C58BP 时,将弹出如下图所示的对话框。 根据实际需要,对芯片配置进行具体设置,然后点击对话框中的“设定”按钮,完成设置配置字操作。此时1.支持模糊查找。如查找P89C52BP ,输入P89C52BP 或P89C52等均可查到。但注意选对“芯片类型”。 2.请用户正确选择芯片型号,否则极易导致编程器和芯片损坏。 3.在选择芯片后,“程序代码缓冲区”中的内容将被清空。所以请用户一定要先选择芯片,再打开所要编程的 文

PZ-ISP STC-ISP 程序烧录步骤

程序烧录步骤 1,USB , 安装驱动程序,驱动程序在“学习光盘”中,具体安装方法参 考配套“使用说明书”https://www.360docs.net/doc/0e13834828.html,B COM 驱动安装完后,请检查的端口号。 当前为COM1 3.\\-FlashMagic 文件路径:学习光盘烧录工具,程序烧录时,要满足下面各参数的设置情况,选种“”选项卡,请按图设置PZ ISP PZ ISP .exe .exe 打开-烧录软件。https://www.360docs.net/doc/0e13834828.html,B COM 与的口一致 2.STC 请选择系列单片机 3.500-999此处最佳设置范围 4.选择扩展名为的程序文件×××().HEX 5.点击“下载”完成烧录程序串口最好不要默认 在COM3上 注意: 如果插上某个USB 口出现“连接超时”或串口不能正常使用 时,请换一个USB 口试试 此软件目前不支持系统,用户请用官方软件烧程序VISTA VISTA STC STC-ISP 6T/12T 模式切换 对于XP 系统驱动程序日期务必是2003-7-16否则就会造成无法烧录 程序。安装光盘中的驱动程序时, 必须完全卸载同类型不同版本的驱 动程序。 安装完后,请在“设备管理器”中 确认驱动程序日期。 注意使用时,短接的实现自动下载为了保障开关的使用寿命,请使用自动 下载方式。 J0Auto ,电源

此款软件也是普中科技公司另一款自动下载软件()此款软件使用更方便、更简洁。只需要选择MCU 型号和要烧录文件,开发仪在端口中名字是推荐使用此款软件。 最大地兼容所有PL2303驱动:Prolific USB-to-Serial Comm Port 注意使用时,短接的实现自动下载为了保障开关的使用寿命,请使用自动 下载方式。 J0Auto ,电源 如果出现此提示,说您的电脑上驱动 程序不是兼容性最好的版本,从而降 低了下载速度.但不影响正常使用. 。 建议安装光盘中驱动程序安装时注意:用安装软件自带“移除”功能 来卸载掉你电脑中原来的驱动程序,否则无 法卸载干净。然后重新安装光盘中配的驱动。

相关文档
最新文档