




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/*STM32步进电机换向程序 按中断0,步进电机反向运转。串口调试助手中出现“It is EXIT0 IRQHandler enter.”采用三个定时器,TIM2,4输出脉冲。TIM3控制相位差。*#include stm32f10x_lib.h#include stdio.h#include time.h#includepwm.hvoid RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void EXIT_Configuration(void);void USART_Configuration(void);int main(void) RCC_Configuration();/ 函数略去 NVIC_Configuration(); GPIO_Configuration();USART_Configuration();EXIT_Configuration(); TIM3_NVIC_Configuration();TIM3_Configuration();TIM4_PWM_Init();TIM2_PWM_Init();TIM_Cmd(TIM4, ENABLE);START_TIME ; while (1) /* 函数名 : GPIO_Configuration*/void GPIO_Configuration(void)/* 定义GPIO初始化结构体 GPIO_InitStructure */ GPIO_InitTypeDef GPIO_InitStructure; /* 设置PA.0,PA.1,PA.2为上拉输入(EXTI Line0)*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA , &GPIO_InitStructure);/* 定义PA.0为外部中断0输入通道(EXIT0) */GPIO_EXTILineConfig(GPIO_PortSourceGPIOA , GPIO_PinSource0);/* 定义PA.1为外部中断0输入通道(EXIT1) */GPIO_EXTILineConfig(GPIO_PortSourceGPIOA , GPIO_PinSource1);/* 设置 USART1 的Tx脚(PA.9)为第二功能推挽输出功能 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA , &GPIO_InitStructure); /* 设置 USART1 的Rx脚(PA.10)为浮空输入脚 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA , &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOA , &GPIO_InitStructure); : NVIC_Configuration*/void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;/* #ifdef.#else.#endif #ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM , 0x0); #else /* VECT_TAB_FLASH */ NVIC_SetVectorTable(NVIC_VectTab_FLASH , 0x0); #endif /* 选择NVIC优先级分组2 */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* 使能EXIT 0通道 ,0级先占优先级 ,0级次占优先级 */ NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);/*void EXIT_Configuration(void)EXTI_InitTypeDef EXTI_InitStructure;外部中断0通道、1通道(EXIT Line0)在下降沿时触发中断 EXTI_InitStructure.EXTI_Line = EXTI_Line0 | EXTI_Line1; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);*/void USART_Configuration(void) USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 115200;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No ;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;USART_Init(USART1 , &USART_InitStructure); USART_Cmd(USART1 , ENABLE);int fputc(int ch, FILE *f)USART_SendData(USART1, (u8)ch);while(USART_GetFlagStatus(USART1, USART_FLAG_TC) = RESET);return ch;#include pwm.hstatic void TIM4_GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructure;/* TIM4 clock enable */PCLK1经过2倍频后作为TIM3的时钟源等于36MHz RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); /* GPIOA and GPIOB clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); /*GPIOA Configuration: TIM4 channel 1 and 2 as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure);/* 描述 :配置TIM4输出的PWM信号的模式,如周期、极性、占空比 static void TIM4_Mode_Config(void)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/* PWM信号50%占空比u16 CCR1_Val =4000; u16 CCR2_Val = 4000; /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 8000; /当定时器从0计数到7999,即为8000次,为一个定时周期 TIM_TimeBaseStructure.TIM_Prescaler = 72-1; /1us TIM_TimeBaseStructure.TIM_ClockDivision = 0;/设置时钟分频系数:不分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; /向上计数模式 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; /配置为PWM模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR1_Val; /设置跳变值,当计数器计数到这个值时,电平发生跳变 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /当定时器计数值小于CCR1_Val时为高电平 TIM_OC1Init(TIM4, &TIM_OCInitStructure); /使能通道1 TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channel2 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR2_Val; /设置通道2的电平跳变值,输出另外一个占空比的PWM TIM_OC2Init(TIM4, &TIM_OCInitStructure); /使能通道2 TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); /* TIM4 enable counter */ TIM_Cmd(TIM4, ENABLE); /使能定时器4static void TIM2_GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructure;/* TIM3 clock enable */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); /* GPIOA and GPIOB clock enable */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE); /*GPIOA Configuration: TIM2channel 1 and 2 as alternate function push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);/* * 描述 :配置TIM3输出的PWM信号的模式,如周期、极性、占空比static void TIM2_Mode_Config(void)TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/* PWM信号电平跳变值 */u16 CCR3_Val =4000; u16 CCR4_Val = 4000; /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 8000; TIM_TimeBaseStructure.TIM_Prescaler = 72-1; TIM_TimeBaseStructure.TIM_ClockDivision = 0;/设置时钟分频系数:不分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel3 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; /配置为PWM模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR3_Val; /,当计数器计数到这个值时,电平发生跳变 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; /当定时器计数值小于CCR1_Val时为高电平 TIM_OC3Init(TIM2, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable); /* PWM1 Mode configuration: Channe4 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR4_Val; 一个占空比的PWM TIM_OC4Init(TIM2, &TIM_OCInitStructure); / TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable); /* TIM2 enable counter */ TIM_Cmd(TIM2, ENABLE); void TIM2_PWM_Init(void)TIM2_GPIO_Config();TIM2_Mode_Config();void TIM4_PWM_Init(void)TIM4_GPIO_Config();TIM4_Mode_Config();#include time.hextern u32 time; * 描述 :TIM3中断配置void TIM3_NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);void TIM3_Configuration(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE); TIM_DeInit(TIM3); TIM_TimeBaseStructure.TIM_Period=2000; TIM_TimeBaseStructure.TIM_Prescaler= (72 - 1); 72M/72 */ TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_ClearFlag(TIM3, TIM_FLAG_Update); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); TIM_Cmd(TIM3, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , DISABLE);void delay_nms(u16 time) u16 i=0; while(time-) i=12000; /自己定义 while(i-) ; #ifndef _PWM_H#define_PWM_H#include stm32f10x_lib.hvoid TIM4_PWM_Init(void);void TIM2_PWM_Init(void);#endif TIM3定时函数#ifndef TIME_H#define TIME_H#include stm32f10x_lib
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中信银行淄博市博山区2025秋招笔试价值观测评题专练及答案
- 2025年黄金从业考试试题及答案
- 光大银行阳泉市城区2025秋招无领导模拟题角色攻略
- 招商银行柳州市城中区2025秋招无领导小组面试案例库
- 2025年电厂保温培训题库及答案
- 岳阳梅溪桥涵洞施工方案
- 施工便道换填施工方案
- olt全光网络施工方案
- 泵道施工方案
- 连续段施工方案
- 医院财务管理年度工作报告
- 灌溉水量平衡分析报告
- 高标准基本农田建设项目初步验收报告
- (2025版)国内旅游“一日游”合同(示范文本)
- 连云港市辅警考试题库2025
- 乡村执业助理试题及答案
- 2025年成人高考专升本医学综合真题及答案
- 2025-2026学年一年级上册统编版道德与法治教学计划
- 国开2025年秋季《形势与政策》专题测验1-5答案
- 急性STEMI PCI术冠状动脉内溶栓共识解读
- 陪诊师备考指南试题及答案
评论
0/150
提交评论