资源描述:
《STM32控制步进电机程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.主函数#include"sys.h"#include"usart.h"#include"delay.h"#include"led.h"#include"timer.h"#include"key.h"intmain(void){u8t;u32v=100;Stm32_Clock_Init(9);//系统时钟设置delay_init(72);//延时初始化uart_init(72,9600);//串口初始化LED_Init();//初始化与LED连接的硬件接口KEY_Init();//初始化与按键连接的硬件接口RCC->APB2ENR
2、=1
3、<<2;//使能PORTA时钟GPIOA->CRL&=0X0FFFFFFF;GPIOA->CRL
4、=0X;//PA7推挽输出GPIOA->ODR
5、=1<<7;//PA7输出高GPIOA->CRL&=0XFF0FFFFF;GPIOA->CRL
6、=0X;//PA5推挽输出GPIOA->ODR
7、=1<<5;//PA5输出高LED1=1;LED0=1;while(1){t=KEY_Scan(0);//得到键值switch(t){caseKEY0_PRES:v=v+10;TIM3_Int_Init(v,7199);//10Khz的计数频率TIM3-
8、>CR1
9、=0x01;break;caseKEY1_PRES:v=v-10;TIM3_Int_Init(v,7199);//10Khz的计数频率TIM3->CR1
10、=0x01;//使能定时器3break;caseWKUP_PRES:TIM3->CR1&=0xFE;//关定时器3;break;}}}1.LED初始化#include"sys.h"#include"led.h"voidLED_Init(void){RCC->APB2ENR
11、=1<<2;//使能PORTA时钟RCC->APB2ENR
12、=1<<5;//使能PORTD时钟GPIOA-
13、>CRH&=0XFFFFFFF0;GPIOA->CRH
14、=0X;//PA8推挽输出GPIOA->ODR
15、=1<<8;//PA8输出高GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL
16、=0X;//PD.2推挽输出GPIOD->ODR
17、=0x0004;//PD.2输出高}2.按键初始化#include"key.h"#include"delay.h"voidKEY_Init(void){RCC->APB2ENR
18、=1<<2;//使能PORTA时钟RCC->APB2ENR
19、=1<<4;//使能PORTC时钟JTAG_Set(SW
20、D_ENABLE);//关闭JTAG,开启SWDGPIOA->CRL&=0XFFFFFFF0;//PA0设置成输入GPIOA->CRL
21、=0X;GPIOA->CRH&=0X0FFFFFFF;//PA15设置成输入GPIOA->CRH
22、=0X;GPIOA->ODR
23、=1<<15;//PA15上拉,PA0默认下拉GPIOC->CRL&=0XFF0FFFFF;//PC5设置成输入GPIOC->CRL
24、=0X;GPIOC->ODR
25、=1<<5;//PC5上拉}u8KEY_Scan(u8mode){staticu8key_up=1;//按键按松开标
26、志if(mode)key_up=1;//支持连按if(key_up&&(KEY0==0
27、
28、KEY1==0
29、
30、WK_UP==1)){delay_ms(10);//去抖动key_up=0;if(KEY0==0)returnKEY0_PRES;elseif(KEY1==0)returnKEY1_PRES;elseif(WK_UP==1)returnWKUP_PRES;}elseif(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;return0;//无按键按下}1.定时器初始化#include"timer.h"#incl
31、ude"led.h"u32i=0;//定时器3中断服务程序voidTIM3_IRQHandler(void){if(TIM3->SR&0X0001)//溢出中断{//GPIOA->ODR^=0x0100;GPIOA->ODR^=0x0080;LED0=!LED0;}TIM3->SR&=~(1<<0);//清除中断标志位}voidTIM3_Int_Init(u16arr,u16psc){RCC->APB1ENR
32、=1<<1;//TIM3时钟使能TIM3->ARR=arr;//设定计数器自动重装值TIM3->PSC=psc;//预分频器设置T
33、IM3->DIER
34、=1<<0;//允许更新中断//TIM3->CR1
35、=0x01;//使能定时器3MY_NVIC_Init(3,3,TIM3_IRQn,2);//抢占3,子优先级3,组2}