STM32F103中断和定时器程序
STM32F103__系列单片机介绍
STM32F103__系列单片机介绍《智能仪表》网络作业__03__系列单片机介绍__03__增强型系列由意法半导体集团设计,使用高性能的ARMCortex-M332位的RISC内核,工作频率为72MHz,内置髙速存储器(髙达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。
所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。
1、结构与功能■内核:ARM32 位的Cortex?-M3CPU72MHz, 1.25DMips/MHz(Dhrystone2.1),0等待周期的存储器?支持单周期乘法和硬件除法■存储器从32K字节至512K字节的闪存程序存储器(__03—中的第二个x表示FLASH 容量,其中:“4”=16K,“6”=32K,“8”=64K,B=128K,C=256K, D=384K, E=512K) ?从6K 字节至64K 字节的SRAM ■时钟、复位和电源管理2.0至3.6伏供电和I/O管脚上电/断电复位(POR/PDR)、可编程电压监测器(PVD) ?内嵌4至16MHz髙速晶体振荡器?内嵌经出厂调校的8MHz的RC振荡器?内嵌40kHz的RC振荡器?PLL供应CPU时钟带校准功能的32kHzRTC 振荡器■低功耗?睡眠、停机和待机模式?VBAT 为RTC 和后备寄存器供电■2个12位模数转换器,1us转换时间(16通道)?转换范围:0至3.6V ?双采样和保持功能?温度传感器■DMA7 通道DMA 控制器支持的外设:定时器、ADC、SPI、I2C和USART ■多达80个快速I/O 口26/37/51/80 个多功能双向5V 兼容的I/O 口?所有I/O 口可以映像到16 个外部中断《智能仪表》网络作业■调试模式串行线调试(SWD)和JTAG接口■多达7个定时器多达3 个16 位定时器,每个定时器有多达4 个用于输入捕获/输出比较/PWM或脉冲计数的通道16 位6 通道高级控制定时器?多达6 路PWM 输出?死区控制、边缘/中间对齐波形和紧急制动 2 个看门狗定时器(独立的和窗口型的) ?系统时间定时器:24 位自减型■多达9 个通信接口多达 2 个I2C 接口(SMBus/PMBus)多达3 个USART 接口,支持__,LIN,IrDA 接口和调制解调控制? 多达2 个SPI 同步串行接口(18 兆位/秒) ?CAN 接口(2.0B 主动) ?USB2.0 全速接口■__?封装(兼容RoHS)2、特点概述ARM?的Cortex?-M3 核心ARM 的Cortex-M3 处理器是最新一代的嵌入式ARM 处理器,它为实现MCU 的需要提供了低成本的平台、缩减的管脚数目、降低的系统功耗,同时提供卓越的计算性能和先进的中断系统响应。
stm32f103c6t6编程手册
一、概述1.1 概述: STM32F103C6T6是一款性能优异的微控制器,广泛应用于工业控制、智能家居、医疗设备等领域。
1.2 目的: 本手册旨在帮助开发人员更好地理解和应用STM32F103C6T6微控制器的编程功能。
二、STM32F103C6T6概述2.1 基本参数: 介绍STM32F103C6T6的主要技术参数,如处理器核心、工作频率、存储器容量等。
2.2 特色功能: 详细阐述STM32F103C6T6的特色功能,如多种外设接口、丰富的定时器功能等。
三、开发环境搭建3.1 开发工具: 推荐适用于STM32F103C6T6的开发工具,如Keil、IAR等。
3.2 驱动安装: 如何在开发环境中安装和配置STM32F103C6T6的驱动程序。
四、编程基础4.1 寄存器设置: 介绍如何使用寄存器进行STM32F103C6T6的基本功能配置。
4.2 中断处理: 如何利用中断实现STM32F103C6T6的异步事件处理。
4.3 时钟管理: 对STM32F103C6T6的时钟配置进行详细说明。
五、外设编程5.1 通用IO: 如何控制STM32F103C6T6的通用IO口进行输入输出操作。
5.2 定时器: STM32F103C6T6的定时器编程方法和应用实例介绍。
5.3 串口通讯: 如何使用STM32F103C6T6的串口通讯功能进行数据传输。
5.4 ADC/DAC: STM32F103C6T6的模数/数模转换功能介绍和编程实践。
5.5 外部中断: STM32F103C6T6外部中断的配置和使用方法。
六、高级功能6.1 定时器中断: 如何使用定时器中断实现精准的定时任务。
6.2 PWM输出: STM32F103C6T6的PWM输出编程方法和应用实例介绍。
6.3 外设通讯: 介绍如何使用SPI、I2C等外设通讯接口。
6.4 调试技巧: STM32F103C6T6编程调试常见问题和解决方法。
七、性能优化7.1 低功耗模式: 如何在STM32F103C6T6中实现低功耗功能。
毕业设计基于stm32的智能小车设计说明
摘要本次试验主要分析了基于STM32F103微处理器的智能小车控制系统的系统设计过程。
此智能系统的组成主要包括STM32F103控制器、电机驱动电路、红外探测电路、超声波避障电路。
本次试验采用STM32F103微处理器为核心芯片,利用PWM技术对速度以及舵机转向进行控制,循迹模块进行黑白检测,避障模块进行障碍物检测并避障功能,其他外围扩展电路实现系统整体功能。
小车在运动时,避障程序优先于循迹程序,用超声波避障电路进行测距并避障,在超声波模块下我们使用舵机来控制超声波的发射方向,用红外探测电路实现小车循迹功能。
在硬件设计的基础上提出了实现电机控制功能、智能小车简单循迹和避障功能的软件设计方案,并在STM32集成开发环境Keil下编写了相应的控制程序,并使用mcuisp软件进行程序下载。
关键词:stm32;红外探测;超声波避障;PWM;电机控制AbstractThis experiment mainly analyzes the control system of smart car based on microprocessor STM32F103 system design process. The composition of the intelligent system mainly including STM32F103 controller, motor drive circuit, infrared detection circuit, circuit of ultrasonic obstacle avoidance. This experiment adopts STM32F103 microprocessor as the core chip, using PWM technique to control speed and steering gear steering, tracking module is used to detect the black and white, obstacle avoidance module for obstacle detection and obstacle avoidance function, other peripheral extended circuit to realize the whole system function. When the car is moving, obstacle avoidance program prior to tracking, using ultrasonic ranging and obstacle avoidance obstacle avoidance circuit, we use steering gear under ultrasonic module to control the emission direction of ultrasonic, infrared detection circuit is used to implement the car tracking function. On the basis of the hardware design is proposed for motor control function, simple intelligent car tracking and obstacle avoidance function of software design, and in the STM32 integrated development environment under the Keil. Write the corresponding control program, and use McUisp program download software.Keywords:STM32;Infrared detection;Ultrasonic obstacle avoidance;PWM;Motor control目录1.绪论.......................................................... - 5 - 1.1研究概况.................................................. - 5 -1.2研究思路.................................................. - 5 -2.软硬件设计.................................................... - 6 - 2.1中央处理模块.............................................. - 6 -2.1.1 stm32f103部结构 ...................................... - 7 -2.1.2 stm32最小系统电路设计 ................................ - 8 -2.1.3 stm32软件设计的基本思路 ............................. - 11 -2.1.4 stm32中断介绍 ....................................... - 12 -2.1.5 stm32定时/计数器介绍 ................................ - 14 -2.1.6 主程序设计流程图..................................... - 15 - 2.2 电机驱动模块............................................. - 16 -2.2.1 驱动模块结构及其原理................................. - 16 -2.2.2 驱动模块电路设计..................................... - 17 -2.2.3驱动软件程序设计 ..................................... - 18 - 2.3 避障模块设计............................................. - 23 -2.3.1 避障模块器件结构及其原理............................. - 24 -2.3.2 HC-SR04模块硬件电路设计 ............................. - 26 -2.3.3 HC-SR04模块程序设计 ................................. - 27 - 2.4循迹模块设计............................................. - 34 -2.4.1 循迹模块结构及其原理................................. - 34 -2.4.2 循迹模块电路设计..................................... - 36 -2.4.3 红外循迹模块程序设计................................. - 37 -3.软件调试..................................................... - 39 - 3.1 程序仿真................................................ - 39 -3.2 程序下载................................................. - 40 -4.系统测试..................................................... - 41 -5.总结......................................................... - 45 - 致............................................................. - 47 - 参考文献....................................................... - 49 - 附录........................................................... - 50 -1.绪论智能小车通过各种感应器获得外部环境信息和部运动状态,实现在复杂环境背景下的自主运动,从而完成具有特定功能的机器人系统。
STM32f103PWM(用于电调)程序
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<0;//TIM2时钟使能
RCC->APB2ENR|=1<<2;//使能PORTA时钟PA0,PA1,PA2,PA3
GPIOA->CRL&=0XFFFFFFF0;//PA0清除之前的设置
GPIOA->CRL|=0X0000000B;//复用功能输出1011每四位控制一个IO低八位用CRL高八位CRH
//TIM2->CCER|=3<<4;//OC2输出使能,低电平有效
//TIM2->CCER|=3<<8;//OC3输出使能,低电平有效
//TIM2->CCER|=3<<12;//OC4输出使能,低电平有效
TIM2->CR1|=1<<7;//ARPE使能自动重载预装载
TIM2->CR1|=1<<0;//使能定时器2
GPIOA->CRL|=0X000000B0;//复用功能输出
GPIOA->CRL&=0XFFFFF0FF;//PA2清除之前的设置
GPIOA->CRL|=0X00000B00;//复用功能输出
GPIOA->CRL&=0XFFFF0FFF;//PA3清除之前的设置
GPIOA->CRL|=0X0000B000;//复用功能输出
TIM2->ARR=arr;//设定计数器自动重装值
TIM2->PSC=psc;//预分频器不分频
TIM2->CCMR1|=6<<4;//CH1 PWM1模式
TIM2->CCMR1|=6<<12;//CH2 PWM1模式
stm32f103工作原理
stm32f103工作原理(最新版)目录一、STM32F103 简介二、STM32F103 的电路原理三、STM32F103 的定时器工作原理四、STM32F103 的串口中断及其配置五、STM32F103 的应用案例六、总结正文一、STM32F103 简介STM32F103 是一种基于 ARM Cortex-M3 内核的微控制器,由STMicroelectronics 公司推出。
它具有高性能、低功耗、多功能、易扩展等特点,广泛应用于各种嵌入式系统中,如智能家居、自动控制、智能穿戴等。
二、STM32F103 的电路原理STM32F103 微控制器的内部电路主要包括 CPU 核心、存储器、定时器、串口、GPIO 等模块。
其中,CPU 核心是整个微控制器的核心,负责程序的执行;存储器用于存储程序和数据;定时器用于计时和控制;串口用于与外部设备进行通信;GPIO 用于与外部设备进行接口。
三、STM32F103 的定时器工作原理STM32F103 系列微控制器共有 11 个定时器,分为高级定时器、普通定时器和基本定时器三类。
这些定时器可以实现多种功能,如计时、测量、控制等。
定时器的工作原理主要基于计数器和时钟脉冲,通过计数器计数时钟脉冲来实现定时功能。
四、STM32F103 的串口中断及其配置STM32F103 的串口模块可以配置为中断模式,当接收到一定数量的字符时,会产生中断信号。
串口中断的配置主要包括使能串口时钟、配置GPIO(TX、RX)以及初始化 NVIC 等步骤。
通过串口中断,可以实现异步通信和实时响应等功能。
五、STM32F103 的应用案例STM32F103 微控制器广泛应用于各种嵌入式系统中,如智能家居、自动控制、智能穿戴等。
例如,在智能家居系统中,可以使用 STM32F103 控制灯光、家电等设备;在自动控制系统中,可以使用 STM32F103 实现传感器数据采集和控制策略执行;在智能穿戴设备中,可以使用 STM32F103 实现运动数据监测和健康管理等功能。
stm32f103zet6定时器详解及应用
stm32f103zet6定时器详解及应用
1、stm32f103zet6芯片及引脚图
2、stm32f103xx器件功能与配置
3、stm32f103zet6 定时器大容量的STM32F103XX增强型系列产品包含最多2个高级控制定时器、4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。
下表比较了高级控制定时器、普通定时器和基本定时器的功能:
定时器功能比较
1)计数器三种计数模式
向上计数模式:从0开始,计到arr预设值,产生溢出事件,返回重新计时
向下计数模式:从arr预设值开始,计到0,产生溢出事件,返回重新计时
中央对齐模式:从0开始向上计数,计到arr产生溢出事件,然后向下计数,计数到1以后,又产生溢出,然后再从0开始向上计数。
(此种技术方法也可叫向上/向下计数)
2)高级控制定时器(TIM1和TIM8)
两个高级控制定时器(TIM1和TIM8)可以被看成是分配到6个通的三三相PWM发生器,它具有带死区插入的互补PWM输出,还可以被当成完整的通用定时器。
四个独立的通道可以用于:
(1)输入捕获
(2)输出比较
(3)产生PWM(边缘或中心对齐模式)
(4)单脉冲输出
配置为16位标准定时器时,它与TIMX定时器具有相同的功能。
配置为16位PWM发生器时,它具有全调制能力(0~100%)。
在调试模式下,计数器可以被冻结,同时PWM输。
(完整版)STM32F103通用教程
STM32F103_使用心得IO端口输入输出模式设置:...........;Delay延时函数:..............;IO端口使用总结:...............;IO口时钟配置:................;初始化IO口参数:...............;注意:时钟使能之后操作IO口才有效!......;IO端口输出高低电平函数:...........;IO的输入IO端口输入输出模式设置: (1)Delay延时函数: (2)IO端口使用总结: (2)IO口时钟配置: (2)初始化IO口参数: (2)注意:时钟使能之后操作IO口才有效! (2)IO端口输出高低电平函数: (2)IO的输入和输出宏定义方式: (3)读取某个IO的电平函数: (3)IO口方向切换成双向 (3)IO 口外部中断的一般步骤: (3)内部ADC使用总结: (4)LCDTFT函数使用大全 (5)TFTLCD使用注意点: (5)IO端口宏定义和使用方法: (6)Keil使用心得: (6)ucGUI移植 (6)DDS AD9850测试程序: (6)ADC 使用小结: (7)ADC测试程序: (9)DAC—tlv5638测试程序 (9)红外测试程序: (9)DMA使用心得: (9)通用定时器使用: (9)BUG发现: (10)编程总结: (10)时钟总结: (10)汉字显示(外部SD卡字库): (11)字符、汉字显示(内部FLASH) (12)图片显示: (16)触摸屏: (17)引脚连接: (19)IO端口输入输出模式设置:Delay延时函数:delay_ms(u16 nms);delay_us(u32 nus);IO端口使用总结:1)使能IO 口时钟。
调用函数为RCC_APB2PeriphClockCmd()。
2)初始化IO 参数。
调用函数GPIO_Init();3)操作IO。
IO口时钟配置:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);初始化IO口参数:注意:时钟使能之后操作IO口才有效!GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); //上拉输入GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure); //LED0-->PA.8 端口配置 //推挽输出技巧:如果为同一端口的不同引脚,可以使用或运算,如GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13|GPIO_Pin_15;IO端口输出高低电平函数:GPIO_SetBits(GPIOA,GPIO_Pin_8|GPIO_Pin_9); //PA.8 输出高GPIO_ResetBits(GPIOA,GPIO_Pin_8);GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal);//可以输出1,也可以输出0GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//整体输出一个值IO的输入和输出宏定义方式:#define DATAOUT(x) GPIOB->ODR=x; //数据输出#define DATAIN GPIOB->IDR; //数据输入#define DATAOUT(DataValue){GPIO_Write(GPIOB,(GPIO_ReadOutputData(GPIOB)&0xff00)|(DataValu e&0x00FF));} //PB0~7,作为数据线读取某个IO的电平函数:(一) 读出一个IO口电平GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)#define KEY0 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_13) //PA13#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15) //PA15#define KEY2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)(二) 读出某个IO口的全部电平GPIO_ReadInputData(GPIOC)IO口方向切换成双向IIC里面的一个实例#define SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;} //PC12#define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}IO 口外部中断的一般步骤:1)初始化IO 口为输入。
STM32F103常用的初始化步骤(第一部分2020年2月)
USART_ITConfig();
6、使能串口
USART_Cmd();
编写中断处理函数
USART1_IRQHandler()
{
}
外部中断初始化过程
1、初始化IO口为输入(使能IO、初始化IO)
2、开启AFIO时钟
3、设置IO口与中断线的映射关系
GPIO_EXTILineConfig();
{
中断逻辑…
EXTI_ClearITPendingBit(EXTI_Line3);
//清除 LINE 上的中断标志位
}
}
IWDG过程
WWDG过程
1、取消寄存器写保护(向IWDG_KR写入0X5555)
IWDG_WriteAccessCmd();
2、设置独立看门狗的预分频系数和重装载值
IWDG_SetPrescaler();
//CC1P=1设置为下降沿捕获
……
}
TIM_ClearITPendingBit(TIM5, TIM_IT_CC1|TIM_IT_Update);
//清除中断标志位
}
电容触摸按键:
见原子代码。
FSMC初始化
1、GPIO,FSMC,AFIO时钟使能;
2、GPIO初始化:GPIO_Init()函数;
3、FSMC初始化:FSMC_NORSRAMInit()函数;
串口初始化代码方式一
串口初始化代码方式二
串口初始化代码方式三(推荐使用)
1、使能IO和USART
2、初始化IO
3、NVIC初始化
4、USART初始化
5、开启中断
USART_ITConfig();
6、使能串口
stm32f103 (标准库)部分例程
stm32f103(标准库)部分例程一、概述stm32f103是一款高性能的32位ARMCortex-M3微控制器,广泛应用于各种嵌入式系统。
本部分例程将介绍如何在STM32标准库中进行一些常见操作,如初始化、中断处理、串口通信等。
二、初始化1.系统时钟设置:通过STM32标准库提供的函数,可以快速设置系统时钟,包括HSI、HSE、PLL等。
2.外设初始化:根据需要,对GPIO、USART、SPI等外设进行初始化。
三、中断处理1.外部中断:通过配置中断优先级和中断向量,实现对外部中断的处理。
2.定时器中断:使用定时器中断,可以实现定时功能,如定时计数、定时延时等。
四、串口通信1.串口初始化:配置串口参数,如波特率、数据位、校验位等。
2.串口发送和接收:通过使用STM32标准库提供的函数,可以实现串口的发送和接收操作。
以下是一个简单的示例程序,用于演示如何使用STM32标准库进行串口通信:```c#include"stm32f10x.h"#include"stm32f10x_gpio.h"#include"stm32f10x_rcc.h"#include"stm32f10x_usart.h"voidUSART1_Init(void){//初始化USART1外设RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);USART_InitTypeDefUSART_InitStruct={0};USART_ART_BaudRate=9600;//设置波特率为9600USART_ART_WordLength=USART_WordLength_8b;//数据位为8位USART_ART_StopBits=USART_StopBits_1;//停止位为1个USART_ART_Parity=USART_Parity_No;//无校验位USART_ART_HardwareFlowControl=USART_HardwareFlowContro l_None;//不使用硬件流控制USART_ART_Mode=USART_Mode_Rx|USART_Mode_Tx;//设置为接收和发送模式USART_Init(USART1,&USART_InitStruct);//初始化USART1外设}voidUSART1_SendData(uint8_tdata){//发送数据到USART1外设USART_SendData(USART1,data);}intmain(void){//初始化GPIO和RCC外设,设置USART1外设时钟等...USART1_Init();while(1){//从USART1接收数据...uint8_treceivedData=USART_ReceiveData(USART1);//接收数据并存储到receivedData变量中...//处理接收到的数据...//发送数据到USART1...USART1_SendData(receivedData);//将处理后的数据发送回USART1外设...}}```以上是一个简单的串口通信示例程序,可以通过STM32标准库提供的函数来实现串口的发送和接收操作。
STM32F103外部中断
#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Configure PB9 as input floating (EXTI Line9) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOB, &GPIO_InitStructure);
3. GPIO 口的初始化
/*******************************************************
***** 外部中断 EXT5 的 中断线 对应的 GPIO 配置 ******
Байду номын сангаас
***** 外部中断管脚: GPIOB_Pin_5,浮动输入
******/
void EXTI_SetupGPIO(void)
中断线 所产生的中断服务 都在同一个中断入口所对应的中断服务函数 ,因此它不能去分 中断线 5 还是 9,因此使用这一中断通道时,外部中断线(以及中断线映射的对应的管脚) 都只能在 5~9 当中的一个,当有效边沿产生时,就会产生中断,进入中断服务子程序。
(stm32f103学习总结)—stm32定时器中断
(stm32f103学习总结)—stm32定时器中断⼀、定时器介绍 STM32F1的定时器⾮常多,由2个基本定时器(TIM6、TIM7)、4个通 ⽤定时器(TIM2-TIM5)和2个⾼级定时器(TIM1、TIM8)组成。
基本定 时器的功能最为简单,类似于51单⽚机内定时器。
通⽤定时器是在基本 定时器的基础上扩展⽽来,增加了输⼊捕获与输出⽐较等功能。
⾼级定 时器⼜是在通⽤定时器基础上扩展⽽来,增加了可编程死区互补输出、 重复计数器、带刹车(断路)功能,这些功能主要针对⼯业电机控制⽅⾯1.1 通⽤定时器简介 STM32F1的通⽤定时器包含⼀个 16 位⾃动重载计数器(CNT),该计 数器由可编程预分频器(PSC)驱动。
STM32F1的通⽤定时器可⽤于多种 ⽤途,包括测量输⼊信号的脉冲宽度(输⼊捕获)或者⽣成输出波形(输出 ⽐较和PWM)等。
使⽤定时器预分频器和 RCC 时钟控制器预分频器,脉 冲长度和波形周期可以在⼏个微秒到⼏个毫秒间调整。
STM32F1 的每个 通⽤定时器都是完全独⽴的,没有互相共享的任何资源。
STM32F1的通⽤定时器TIMx (TIM2-TIM5 )具有如下功能:(1)16 位向上、向下、向上/向下⾃动装载计数器(TIMx_CNT)。
(2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535之间的任意数值。
(3)4个独⽴通道(TIMx_CH1-4),这些通道可以⽤来作为: A.输⼊捕获 B.输出⽐较 C. PWM ⽣成(边缘或中间对齐模式) D.单脉冲模式输出(4)可使⽤外部信号(TIMx_ETR)控制定时器,且可实现多个定时器互连(可以⽤1个定时器控制另外⼀个定时器)的同步电路。
(5)发⽣如下事件时产⽣中断/DMA请求: A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发) B.触发事件(计数器启动、停⽌、初始化或者由内部/外部触发计数) C.输⼊捕获 D.输出⽐较(6)⽀持针对定位的增量(正交)编码器和霍尔传感器电路(7)触发输⼊作为外部时钟或者按周期的电流管理1.2 通⽤定时器结构框图我们把通⽤定时器结构框图分成 5 个⼦模块,按照顺序依次进⾏简单介绍。
stm32f103c8t6中断原理
stm32f103c8t6中断原理一、概述STM32F103C8T6是一款基于ARMCortex-M3核心的STM32系列微控制器。
它具有丰富的外设和强大的性能,广泛应用于各种嵌入式系统。
中断是STM32微控制器中非常重要的概念,用于处理硬件事件,使得处理器能够及时响应和处理这些事件,提高系统的实时性和响应速度。
二、中断系统架构STM32F103C8T6的中断系统由硬件和软件两部分组成。
硬件部分包括中断控制器、外设中断请求源、全局中断标志位等;软件部分包括中断优先级管理、中断处理函数等。
中断控制器负责管理各个外设的中断请求,并将这些请求分配给相应的中断优先级。
外设中断请求源包括定时器、串口、ADC等,它们会在特定事件发生时产生中断请求。
全局中断标志位用于指示是否有中断事件发生,这些标志位由处理器轮询或软件查询。
三、中断优先级管理STM32F103C8T6的中断优先级管理采用嵌套模式,即一个中断可以被嵌套在另一个中断的触发序列中。
处理器会根据中断优先级和嵌套级别来决定先处理哪个中断。
STM32的中断优先级范围为0-7,其中0为最高优先级,7为最低优先级。
可以通过软件配置寄存器来设置各个中断的优先级。
四、中断处理过程当有中断事件发生时,处理器会自动跳转到相应的中断处理函数执行。
中断处理函数通常会完成一些必要的清理工作,如清除相关标志位、释放锁定的资源等,然后返回到正常的主程序继续执行。
在处理完一个中断后,处理器会自动回到正常的主程序执行,而不会出现死循环或延迟。
五、特殊中断STM32F103C8T6微控制器还支持一些特殊的中断,如系统复位中断、系统心跳中断等。
这些中断通常用于系统状态监测和异常处理,确保系统的稳定性和可靠性。
六、总结STM32F103C8T6的中断原理涉及到硬件和软件两个方面的知识,包括中断系统架构、中断优先级管理、中断处理过程以及特殊中断等。
理解中断原理对于使用STM32微控制器进行嵌入式系统开发非常重要,可以帮助开发者更好地利用其强大的硬件资源,提高系统的实时性和响应速度。
STM32F103RCT6引脚功能及使用
STM32F103RCT6引脚功能及使用1.引脚定义:STM32F103RCT6一共有64个引脚,标有PA0~PA15、PB0~PB15、PC0~PC15、PD0~PD15、PE0~PE15等标识。
2.引脚功能:STM32F103RCT6引脚可以设置不同的功能,包括GPIO(通用输入输出)、外部中断、定时器、串口通信、SPI、I2C等。
3.引脚复用:STM32F103RCT6支持引脚的复用功能,通过将引脚配置为不同的复用功能,实现不同的外设功能。
比如可以将一些引脚配置为串口1的TX功能,将另一个引脚配置为串口1的RX功能。
4.引脚模式设置:对于GPIO引脚,可以设置为输入模式、输出模式或者复用功能模式。
输入模式可以获取外部信号并进行处理,输出模式可以控制外部设备。
5.引脚中断:STM32F103RCT6芯片支持外部中断功能,可以通过配置一些引脚为外部中断输入来实现外部中断的响应。
当外部信号引发中断时,芯片可以立即执行中断服务程序。
6.引脚状态检测:通过读取引脚的状态,可以检测引脚的逻辑电平,从而判断外部信号的状态。
7.引脚驱动能力:对于输出引脚,可以设置不同的驱动能力,以适应不同电平或者负载要求。
8.引脚电平转换:STM32F103RCT6芯片支持5V和3.3V两种电平转换方式,可以通过引脚配置来实现。
9.引脚数据通信:除了GPIO功能外,STM32F103RCT6芯片还支持多种串口通信协议,包括UART、SPI、I2C等。
这些通信协议可以通过引脚配置来实现。
总之,STM32F103RCT6芯片具有丰富的引脚功能,能够满足不同应用场景的需求。
用户可以根据具体的应用要求,通过配置芯片的引脚功能和模式,实现对外设的控制和通信。
同时,使用STM32系列的开发工具和文档,可以方便地进行开发和调试。
《stm32f103单片机应用开发实例》
一、介绍STM32F103单片机STM32F103是STMicroelectronics公司推出的一款基于ARM Cortex-M3内核的微控制器,具有丰富的外设和强大的性能,被广泛应用于工业控制、汽车电子、消费类电子等领域。
本文将通过一些实际的应用开发示例,介绍STM32F103单片机的应用开发。
二、STM32F103单片机开发环境搭建1. 硬件环境2. 软件环境3. 开发工具的选择和配置4. 开发过程中常见问题的解决方法三、基本的STM32F103单片机应用开发1. 点亮LED灯2. 控制LED灯的闪烁3. 串口通信4. 定时器应用5. 外部中断应用四、STM32F103单片机外设的应用开发1. 通用定时器 (TIM) 的应用开发2. 串行外设接口 (SPI) 的应用开发3. 串行通信接口 (USART) 的应用开发4. 直接存储器访问 (DMA) 的应用开发5. PWM 的应用开发五、STM32F103单片机高级应用开发1. 定时器中断和DMA传输的应用2. 外部中断和定时器的结合应用3. 外设之间的协同工作应用开发4. 看门狗 (Watchdog) 的应用开发5. 低功耗模式下的应用开发六、实例分析和实验结果1. 确定应用目标2. 使用STM32CubeMX生成代码3. 编写应用程序代码4. 调试和验证5. 总结和改进七、总结和展望通过以上的实例分析和实验结果,我们对STM32F103单片机的应用开发有了更深入的理解。
在未来,随着技术的不断发展,STM32F103单片机的应用将会更加广泛,我们也将在实际项目中不断总结经验,进一步完善应用开发方法,为相关领域的技术创新和应用发展做出更大的贡献。
以上就是《STM32F103单片机应用开发实例》的相关内容,希望可以对您有所帮助。
八、实例分析和实验结果为了更好地理解STM32F103单片机的应用开发,我们将具体分析一个LED灯控制的实例,并展示实验结果。
stm32f103工作原理
STM32F103工作原理解析引言STM32F103是一款由意法半导体(STMicroelectronics)推出的32位ARM Cortex-M3内核的微控制器。
它是一款功能强大且广泛应用的微控制器,常用于工业自动化、电机控制、嵌入式系统等领域。
本文将详细解释STM32F103的工作原理,包括芯片架构、时钟系统、外设模块和程序执行过程等方面。
芯片架构STM32F103采用了哈佛结构的体系结构,具有较高的运行效率和较低的功耗。
它的主要组成部分包括核心处理器、存储器、外设模块和时钟系统。
核心处理器STM32F103采用了ARM Cortex-M3内核,这是一款32位的RISC处理器。
它具有高性能、低功耗和高代码密度的特点。
Cortex-M3内核包含了ARM Thumb-2指令集,支持从1到4字节的指令,并且具有较好的代码压缩能力。
存储器STM32F103具有多种类型的存储器,包括闪存、SRAM和备份寄存器。
闪存用于存储程序代码和常量数据,具有较大的容量和较快的访问速度。
SRAM用于存储变量和堆栈数据,具有较快的读写速度。
备份寄存器用于存储关键数据,例如时钟设置和唯一设备ID等。
外设模块STM32F103内置了丰富的外设模块,包括通用输入输出口(GPIO)、串行通信接口(USART)、定时器、模拟数字转换器(ADC)等。
这些外设模块可以通过寄存器配置和控制来实现各种功能,例如数据输入输出、通信、计时和信号转换等。
时钟系统时钟系统是STM32F103的重要组成部分,它提供了系统时钟和外设时钟。
STM32F103具有多个时钟源,包括内部RC振荡器、外部晶体振荡器和外部时钟输入。
时钟系统还包括PLL锁相环,可以通过倍频和分频来生成不同频率的系统时钟。
时钟系统时钟系统是STM32F103的核心部分,它为整个芯片提供了时序控制和同步功能。
时钟系统包括系统时钟和外设时钟两部分。
系统时钟系统时钟是STM32F103内部各模块运行所需的时钟信号。
STM32F103中断和定时器程序
STM32中断程序/*======================================================================================== *名称: main.c*功能:*入口参数:*说明:去掉stm32f10x_conf.h里#include "stm32f10x_tim.h" 注释*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/ #include "stm32f10x.h"#include "12864.h"ErrorStatus HSEStartUpStatus; //等待时钟的稳定u8 count=0;u8 d;void SYS_Configuration(void);/*//ms延时函数void delayms(unsigned int nValue) //delay 1ms at 8M{unsigned int nCount;unsigned int ii;unsigned int jj;nCount = 1980;for(ii = nValue;ii > 0;ii--){for(jj = nCount;jj > 0;jj--)Delay(1);}}*///GPIO管脚初始化配置void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure; //GPIO状态恢复默认参数/*GPIO口配置每四行一组,每组GPIO属性相同,默认情况:ALL,2MHZ,FLATING*//*PA-2-3配置为输出*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_7; //管脚位置定义GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度为50MHZGPIO_Init(GPIOA, &GPIO_InitStructure); //A组GPIO初始化/*PB-2配置为输出*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //管脚位置定义GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度为50MHZGPIO_Init(GPIOB, &GPIO_InitStructure); //B组GPIO初始化/*PA-0配置为输入--------------------------------------------------------外部中断引脚*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);}/*======================================================================================== *名称: NVIC_Configuration();*功能:外部中断嵌套控制*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/ void NVIC_Configuration(void) //嵌套中断向量控制配置{NVIC_InitTypeDef NVIC_InitStructure; //定义数据结构的变量// 选择优先组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //0组,全副优先级NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; //选择中断通道,库P166页,NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //响应优先级0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //启动此通道的中断NVIC_Init(&NVIC_InitStructure); //结构体初始化}/*========================================================================================*名称: EXTI_Configuration();*功能:外部设备中断初始化*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/void EXTI_Configuration(void) //中断初始化 (外部设备中断){EXTI_InitTypeDef EXTI_InitStructure; //定义数据结构的变量GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //管脚选择// GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);EXTI_InitStructure.EXTI_Line=EXTI_Line0; //将以上入口放在EXTI_Line0这条线上(stm32有18条这样的线路)EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //中断模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //选择上升或下降沿触发EXTI_InitStructure.EXTI_LineCmd=ENABLE; //开中断EXTI_Init(&EXTI_InitStructure); //将结构体初始化}/*========================================================================================*名称: Timer_Config();*功能:定时器中断初始化*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/void Timer_Config(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定义TIM结构体变量RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //使能TIM2外设TIM_DeInit(TIM2); //复位时钟TIM2,恢复到初始状态TIM_TimeBaseStructure.TIM_Period=17999; //35999和1999刚好1sTIM_TimeBaseStructure.TIM_Prescaler=1999;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //TIM2时钟分频TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //计数方式// 定时时间T计算公式:// T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK=(35999+1)*(1999+1)/72MHz=1sTIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //初始化TIM_ClearFlag(TIM2,TIM_FLAG_Update); //清除标志// 中断方式下,使能中断源TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //使能中断源TIM_Cmd(TIM2,ENABLE); //使能TIM2}/*======================================================================================== *名称: NVIC_Config();*功能:定时器嵌套控制*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/ void NVIC_Config(void) //定时器嵌套向量控制器{NVIC_InitTypeDef NVIC_InitStructure; //定义结构体变量// 设置优先分级组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //0组,全副优先级NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn; //选择中断通道,库P166页,// 选择中断通道。
STM32F103RCT6的基本定时器
STM32F103RCT6的基本定时器1、定时器的分类 STM32F103ZET6总共有8个定时器,它们是:TIM1~TIM8。
STM32的定时器分为基本定时器、通⽤定时器和⾼等定时器。
TIM6、TIM7是基本定时器。
基本定时器是只能向上计数的16位定时器,基本定时器只能有定时的功能,没有外部IO⼝,所以没有捕获和⽐较通道。
TIM2、TIM3、TIM4、TIM5是通⽤定时器。
通⽤定时器是可以向上计数,也可以向下计数的16位定时器。
通⽤定时器可以定时、输出⽐较、输⼊捕捉,每个通⽤定时器具有4个外部IO⼝。
TIM1、TIM8是⾼等定时器。
⾼等定时器是是可以向上计数,也可以向下计数的16位定时器。
⾼等定时器可以定时、输出⽐较、输⼊捕捉、还可以输出三相电机互补信号,每个⾼等定时器有8个外部IO⼝。
定时器分类图如下:2、基本定时器 基本定时器没有外部IO⼝,所以它只有定时的功能。
基本定时器只能向上计数,也就是说基本定时器只能递增计数。
基本定时器功能框图如下: 从功能图的1中可以看到,基本定时器的时钟TIMxCLK来⾃内部时钟,该内部时钟为经过APB1预分频器分频后提供的。
基本定时器跟APB1总线时钟的关系如下:如果APB1预分频系数为1,则基本定时器的时钟等于APB1总线时钟。
如果APB1预分频系数不为1,则基本定时器的时钟等于APB1总线时钟经过分频后的2倍。
⽐如APB1总线经过2分频后的时钟为36MHZ,那么基本定时器的时钟就是72MHZ3(36*2)。
功能图中的2是⼀个预分频器,来⾃内部的时钟经过预分器分频后的时钟,⽤来驱动基本定时器的计数器计数。
基本定时器的预分频器是⼀个16位的预分频器,预分频器可以对定时器时钟进⾏1~65536之间的任何⼀个数进⾏分频。
计算⽅式如下: 定时器⼯作时钟 = 来⾃APB1的时钟/(预分频系数+1) 功能图中的3是⼀个16位的计数器,该计数器能能向上计数,最⼤计数值位65535。
STM32F103编程入门
STM32F103单片机编程入门一款单片机入门,至少四样:时钟、端口、定时、串口、中断。
系统时钟RCC系统内部有8M_RC晶振和32678Hz_RC晶振有大约2%的温飘。
当外部有8M晶振时,自动选择外部晶振,失效时自动切换成内部。
程序自动倍频成72M。
如果用于通信最好加个外部晶振。
判断是否使用外部晶振的方法:短接外部晶振引脚观察工作情况。
分为两个桥,对应不同的外设,每个外设又可以单独设定时钟。
初步学习,先不用单独设定,均选用系统时钟72M。
可根据情况做一步分频。
用到某外设时,配置RCC〔翻开外设时钟〕,一般只有一句指令。
一般临时查找。
呵呵,我也没找到好方法。
GPIO:RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE); USART:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);Timer2:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);端口GPIO端口配置思路:1,先定义一个结构体配置成员参数值,类型是GPIO_InitTypeDef,下划线是结构体名;结构体名是GPIO_InitStructure:名称可以自定义。
在后面利用参数初始化函数时要一致。
2,翻开相对应的端口时钟RCC。
3,声明要配置的管脚,可以用“|〞复选4,配置模式,4种输入,4种输出5,配置管脚频率,一般都是50Mhz6,最后调用函数GPIO_Init(GPIOA, &GPIO_InitStructure);第2个参数是,结构体地址指针。
Eg:GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOC, &GPIO_InitStructure);一、串口USART串口配置思路:1,定义结构体,类型是USART_InitTypeDef;2,翻开串口时钟,可以选择和端口GPIO一起3,设置波特率,—————省去了复杂的烦人的计算4,设置字长。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32中断程序/*======================================================================================== *名称: main.c*功能:*入口参数:*说明:去掉stm32f10x_conf.h里#include "stm32f10x_tim.h" 注释*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/ #include "stm32f10x.h"#include "12864.h"ErrorStatus HSEStartUpStatus; //等待时钟的稳定u8 count=0;u8 d;void SYS_Configuration(void);/*//ms延时函数void delayms(unsigned int nValue) //delay 1ms at 8M{unsigned int nCount;unsigned int ii;unsigned int jj;nCount = 1980;for(ii = nValue;ii > 0;ii--){for(jj = nCount;jj > 0;jj--)Delay(1);}}*///GPIO管脚初始化配置void GPIO_Configuration(void){GPIO_InitTypeDef GPIO_InitStructure; //GPIO状态恢复默认参数/*GPIO口配置每四行一组,每组GPIO属性相同,默认情况:ALL,2MHZ,FLATING*//*PA-2-3配置为输出*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_7; //管脚位置定义GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度为50MHZGPIO_Init(GPIOA, &GPIO_InitStructure); //A组GPIO初始化/*PB-2配置为输出*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //管脚位置定义GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置输出模式GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速度为50MHZGPIO_Init(GPIOB, &GPIO_InitStructure); //B组GPIO初始化/*PA-0配置为输入--------------------------------------------------------外部中断引脚*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);}/*========================================================================================*名称: NVIC_Configuration();*功能:外部中断嵌套控制*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/void NVIC_Configuration(void) //嵌套中断向量控制配置{NVIC_InitTypeDef NVIC_InitStructure; //定义数据结构的变量// 选择优先组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //0组,全副优先级NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn; //选择中断通道,库P166页,NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0; //抢占优先级0NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //响应优先级0NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //启动此通道的中断NVIC_Init(&NVIC_InitStructure); //结构体初始化}/*========================================================================================*名称: EXTI_Configuration();*功能:外部设备中断初始化*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/void EXTI_Configuration(void) //中断初始化 (外部设备中断){EXTI_InitTypeDef EXTI_InitStructure; //定义数据结构的变量GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //管脚选择// GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource4);EXTI_InitStructure.EXTI_Line=EXTI_Line0; //将以上入口放在EXTI_Line0这条线上(stm32有18条这样的线路)EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt; //中断模式EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling; //选择上升或下降沿触发EXTI_InitStructure.EXTI_LineCmd=ENABLE; //开中断EXTI_Init(&EXTI_InitStructure); //将结构体初始化}/*========================================================================================*名称: Timer_Config();*功能:定时器中断初始化*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/ void Timer_Config(void){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //定义TIM结构体变量RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //使能TIM2外设TIM_DeInit(TIM2); //复位时钟TIM2,恢复到初始状态TIM_TimeBaseStructure.TIM_Period=17999; //35999和1999刚好1sTIM_TimeBaseStructure.TIM_Prescaler=1999;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //TIM2时钟分频TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //计数方式// 定时时间T计算公式:// T=(TIM_Period+1)*(TIM_Prescaler+1)/TIMxCLK=(35999+1)*(1999+1)/72MHz=1sTIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //初始化TIM_ClearFlag(TIM2,TIM_FLAG_Update); //清除标志// 中断方式下,使能中断源TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //使能中断源TIM_Cmd(TIM2,ENABLE); //使能TIM2}/*========================================================================================*名称: NVIC_Config();*功能:定时器嵌套控制*入口参数:*说明:放入主函数里初始化*范例:*编者时间: Ye.FuYao 2012-9-23*========================================================================================*/ void NVIC_Config(void) //定时器嵌套向量控制器{NVIC_InitTypeDef NVIC_InitStructure; //定义结构体变量// 设置优先分级组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //0组,全副优先级NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn; //选择中断通道,库P166页,// 选择中断通道。