標(biāo)題:
STM32控制步進(jìn)電機(jī) 源程序
[打印本頁(yè)]
作者:
久醉繞心弦
時(shí)間:
2020-9-17 09:16
標(biāo)題:
STM32控制步進(jìn)電機(jī) 源程序
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "misc.h"
void RCC_Configuration(void);
void GPIO_Configuration(void);
void ZhengZhuan(u16 tt);
void FanZhuan(u16 tt);
void delay_ms(u16 nms);
/****************************************************************************
* 名 稱:int main(void)
* 功 能:主函數(shù)
* 入口參數(shù):無(wú)
* 出口參數(shù):無(wú)
* 說(shuō) 明:
* 調(diào)用方法:無(wú)
****************************************************************************/
int main(void)
{
RCC_Configuration(); //系統(tǒng)時(shí)鐘設(shè)置及外設(shè)時(shí)鐘使能
GPIO_Configuration();
while (1)
{
//讀取PC5管腳的輸入狀態(tài) K1
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_5) == Bit_RESET)
{
ZhengZhuan(5);//高速
}
//讀取PC5管腳的輸入狀態(tài) K2
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == Bit_RESET)
{
FanZhuan(5);//高速
}
//讀取PC2管腳的輸入狀態(tài) K3
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_2) == Bit_RESET)
{
ZhengZhuan(10);//低速
}
//讀取PC3管腳的輸入狀態(tài) K4
if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_3) == Bit_RESET)
{
FanZhuan(10);//低速
}
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_4);
}
}
/****************************************************************************
* 名 稱:void RCC_Configuration(void)
* 功 能:系統(tǒng)時(shí)鐘配置為72MHZ, 外設(shè)時(shí)鐘配置
* 入口參數(shù):無(wú)
* 出口參數(shù):無(wú)
* 說(shuō) 明:
* 調(diào)用方法:無(wú)
****************************************************************************/
void RCC_Configuration(void)
{
SystemInit();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE , ENABLE);
}
/****************************************************************************
* 名 稱:void GPIO_Configuration(void)
* 功 能:LED控制口線及鍵盤設(shè)置
* 入口參數(shù):無(wú)
* 出口參數(shù):無(wú)
* 說(shuō) 明:
* 調(diào)用方法:無(wú)
****************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //端口配置結(jié)構(gòu)體
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PD3管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口線翻轉(zhuǎn)速度為50MHz
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //PD6管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口線翻轉(zhuǎn)速度為50MHz
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PD12管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口線翻轉(zhuǎn)速度為50MHz
GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //PE4管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //口線翻轉(zhuǎn)速度為50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PC5管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //輸入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //PC1管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //輸入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PC2管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //輸入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化端口
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //PC3管腳
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //輸入上拉
GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化端口
}
//電機(jī)正轉(zhuǎn)函數(shù)
void ZhengZhuan(u16 tt)
{
//1100
GPIO_SetBits(GPIOD, GPIO_Pin_3);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
//0110
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
GPIO_SetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
//0011
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_SetBits(GPIOD, GPIO_Pin_12);
GPIO_SetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
//1001
GPIO_SetBits(GPIOD, GPIO_Pin_3);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
GPIO_SetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
}
//電機(jī)反轉(zhuǎn)函數(shù)
void FanZhuan(u16 tt)
{
//1001
GPIO_SetBits(GPIOD, GPIO_Pin_3);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
GPIO_SetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
//0011
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_SetBits(GPIOD, GPIO_Pin_12);
GPIO_SetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
//0110
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
GPIO_SetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
//1100
GPIO_SetBits(GPIOD, GPIO_Pin_3);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOD, GPIO_Pin_12);
GPIO_ResetBits(GPIOE, GPIO_Pin_4);
delay_ms(tt);
}
void delay_ms(u16 nms)
{
u32 temp;
SysTick->LOAD = 9000*nms;
SysTick->VAL=0X00;//清空計(jì)數(shù)器
SysTick->CTRL=0X01;//使能,減到零是無(wú)動(dòng)作,采用外部時(shí)鐘源
do
{
temp=SysTick->CTRL;//讀取當(dāng)前倒計(jì)數(shù)值
}while((temp&0x01)&&(!(temp&(1<<16))));//等待時(shí)間到達(dá)
SysTick->CTRL=0x00; //關(guān)閉計(jì)數(shù)器
SysTick->VAL =0X00; //清空計(jì)數(shù)器
}
復(fù)制代碼
STM32控制步進(jìn)電機(jī).rar
2020-9-17 09:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
270.23 KB, 下載次數(shù): 43, 下載積分: 黑幣 -5
作者:
51hei團(tuán)團(tuán)
時(shí)間:
2020-9-17 15:59
能分享一下源程序嗎?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1