打印
[开源硬件]

GRBL七: STM32代码移植——IO

[复制链接]
3167|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TXQDM|  楼主 | 2017-7-8 13:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先看引脚映射,关于引脚的定义都在pin_map.h中
其实感觉GRBL的引脚这地做的不太人性,因为他的几个引脚都是用的同一个IO通道且是挨在一起的,程序中对引脚的操作也是按照挨在一起的算法进行的,如果用的是不一个通道IO
且重复的话就不适合了,例如如果X_STEP使用A0  Y_STEP使用B0这样就会出现错误,可以使用不同通道,但是要确保X_STEP_BIT ,Y_STEP_BIT  , Z_STEP_BIT  ,X_DIRECTION_BIT ,Y_DIRECTION_BIT ,Z_DIRECTION_BIT 使用的是不同位,这是默认的情况,也可以在参数中修改这些bit的具体位置$6的值就是这六个引脚的映射
pin_map.h

[cpp] view plain copy

  • /*
  •   pin_map.h - Pin mapping configuration file
  •   Part of Grbl
  •   The MIT License (MIT)
  •   GRBL(tm) - Embedded CNC g-code interpreter and motion-controller
  •   Copyright (c) 2013 Sungeun K. Jeon
  •   Permission is hereby granted, free of charge, to any person obtaining a copy
  •   of this software and associated documentation files (the "Software"), to deal
  •   in the Software without restriction, including without limitation the rights
  •   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  •   copies of the Software, and to permit persons to whom the Software is
  •   furnished to do so, subject to the following conditions:
  •   The above copyright notice and this permission notice shall be included in
  •   all copies or substantial portions of the Software.
  •   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  •   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  •   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  •   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  •   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  •   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  •   THE SOFTWARE.
  • */
  • /* The pin_map.h file serves as a central pin mapping settings file for different processor
  •    types, i.e. AVR 328p or AVR Mega 2560. Grbl officially supports the Arduino Uno, but the
  •    other supplied pin mappings are supplied by users, so your results may vary. */
  • #ifndef pin_map_h
  • #define pin_map_h
  • //add by zjk for stm32
  • #ifdef PIN_MAP_STM32 // AVR 328p, Officially supported by Grbl.
  •   // Serial port pins
  • //  #define SERIAL_RX USART_RX_vect
  • //  #define SERIAL_UDRE USART_UDRE_vect
  •   // NOTE: All step bit and direction pins must be on the same port.
  • //  #define STEPPING_DDR       DDRD
  • //  #define STEPPING_PORT      PORTD
  • //  #define X_STEP_BIT         2  // Uno Digital Pin 2
  • //  #define Y_STEP_BIT         3  // Uno Digital Pin 3
  • //  #define Z_STEP_BIT         4  // Uno Digital Pin 4
  • //  #define X_DIRECTION_BIT    5  // Uno Digital Pin 5
  • //  #define Y_DIRECTION_BIT    6  // Uno Digital Pin 6
  • //  #define Z_DIRECTION_BIT    7  // Uno Digital Pin 7
  • //  #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
  • //  #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
  • //  #define STEPPING_MASK (STEP_MASK | DIRECTION_MASK) // All stepping-related bits (step/direction)
  •   #define X_STEP_PORT      GPIOA->ODR
  •   #define Y_STEP_PORT      GPIOD->ODR
  •   #define Z_STEP_PORT
  •   #define X_STEP_BIT         8  // PA8
  •   #define Y_STEP_BIT         15  // PD15
  •   #define Z_STEP_BIT
  •   #define X_STEP_MASK      (1<<X_STEP_BIT)
  •   #define Y_STEP_MASK      (1<<Y_STEP_BIT)
  •   #define Z_STEP_MASK      (1<<Z_STEP_BIT)
  •   #define X_STEP_TRASLATE(a)  ((a>>2)<<X_STEP_BIT)
  •   #define Y_STEP_TRASLATE(a)  ((a>>3)<<Y_STEP_BIT)
  •   #define Z_STEP_TRASLATE(a)  ((a>>4)<<Z_STEP_BIT)
  •   #define X_DIRECTION_PORT  GPIOA->ODR
  •   #define Y_DIRECTION_PORT  GPIOA->ODR
  •   #define Z_DIRECTION_PORT
  •   #define X_DIRECTION_BIT    6  // PC6
  •   #define Y_DIRECTION_BIT    2  // PA2
  •   #define Z_DIRECTION_BIT
  •   #define X_DIRECTION_MASK   (1<<X_DIRECTION_BIT)
  •   #define Y_DIRECTION_MASK   (1<<Y_DIRECTION_BIT)
  •   #define Z_DIRECTION_MASK   (1<<Z_DIRECTION_BIT)
  •   #define X_DIRECTION_TRASLATE(a) ((a>>5)<<X_DIRECTION_BIT)
  •   #define Y_DIRECTION_TRASLATE(a) (a)
  •   #define Z_DIRECTION_TRASLATE(a) ((a>>7)<<Z_DIRECTION_BIT)
  •   #define X_STEP_EN   GPIO_SetBits(GPIOA , GPIO_Pin_8)
  •   #define X_STEP_DIS  GPIO_ResetBits(GPIOA , GPIO_Pin_8)
  •   #define Y_STEP_EN   GPIO_SetBits(GPIOD , GPIO_Pin_15)
  •   #define Y_STEP_DIS  GPIO_ResetBits(GPIOD , GPIO_Pin_15)
  •   #define STEPPING_EN   X_STEP_EN;Y_STEP_EN
  •   #define STEPPING_DIS  X_STEP_DIS;Y_STEP_DIS
  •   #define X_DIRECTION_EN   GPIO_SetBits(GPIOA , GPIO_Pin_6)
  •   #define X_DIRECTION_DIS  GPIO_ResetBits(GPIOA , GPIO_Pin_6)
  •   #define Y_DIRECTION_EN   GPIO_SetBits(GPIOA , GPIO_Pin_2)
  •   #define Y_DIRECTION_DIS  GPIO_ResetBits(GPIOA , GPIO_Pin_2)
  •   #define DIRECTION_EN   X_DIRECTION_EN;Y_DIRECTION_EN
  •   #define DIRECTION_DIS  X_DIRECTION_DIS;Y_DIRECTION_DIS
  • //  #define STEPPERS_DISABLE_DDR    DDRB
  • //  #define STEPPERS_DISABLE_PORT   PORTB
  • //  #define STEPPERS_DISABLE_BIT    0  // Uno Digital Pin 8
  • //  #define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
  •   #define STEPPERS_DISABLE_EN  GPIO_SetBits(GPIOA , GPIO_Pin_3);GPIO_SetBits(GPIOA , GPIO_Pin_4)
  •   #define STEPPERS_DISABLE_DIS  GPIO_ResetBits(GPIOA , GPIO_Pin_3);GPIO_ResetBits(GPIOA , GPIO_Pin_4)
  •   // NOTE: All limit bit pins must be on the same port
  • //  #define LIMIT_DDR       DDRB
  • //  #define LIMIT_PIN       PINB
  • //  #define LIMIT_PORT      PORTB
  • //  #define X_LIMIT_BIT     1  // Uno Digital Pin 9
  • //  #define Y_LIMIT_BIT     2  // Uno Digital Pin 10
  • //  #define Z_LIMIT_BIT     3  // Uno Digital Pin 11
  • //  #define LIMIT_INT       PCIE0  // Pin change interrupt enable pin
  • //  #define LIMIT_INT_vect  PCINT0_vect
  • //  #define LIMIT_PCMSK     PCMSK0 // Pin change interrupt register
  • //  #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
  •   //带刀轴主轴电机
  • //  #define SPINDLE_ENABLE_DDR   DDRB
  • //  #define SPINDLE_ENABLE_PORT  PORTB
  • //  #define SPINDLE_ENABLE_BIT   4  // Uno Digital Pin 12
  • //
  • //  #define SPINDLE_DIRECTION_DDR   DDRB
  • //  #define SPINDLE_DIRECTION_PORT  PORTB
  • //  #define SPINDLE_DIRECTION_BIT   5  // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
  • //  #define COOLANT_FLOOD_DDR   DDRC
  • //  #define COOLANT_FLOOD_PORT  PORTC
  • //  #define COOLANT_FLOOD_BIT   3  // Uno Analog Pin 3
  •   // NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at
  •   // a later date if flash and memory space allows.
  •   // #define ENABLE_M7  // Mist coolant disabled by default. Uncomment to enable.
  •   #ifdef ENABLE_M7
  •     #define COOLANT_MIST_DDR   DDRC
  •     #define COOLANT_MIST_PORT  PORTC
  •     #define COOLANT_MIST_BIT   4 // Uno Analog Pin 4
  •   #endif
  •   // NOTE: All pinouts pins must be on the same port
  •   #define PINOUT_DDR       DDRC
  •   #define PINOUT_PIN       PINC
  •   #define PINOUT_PORT      PORTC
  •   #define PIN_RESET        0  // Uno Analog Pin 0
  •   #define PIN_FEED_HOLD    1  // Uno Analog Pin 1
  •   #define PIN_CYCLE_START  2  // Uno Analog Pin 2
  •   #define PINOUT_INT       PCIE1  // Pin change interrupt enable pin
  •   #define PINOUT_INT_vect  PCINT1_vect
  •   #define PINOUT_PCMSK     PCMSK1 // Pin change interrupt register
  •   #define PINOUT_MASK ((1<<PIN_RESET)|(1<<PIN_FEED_HOLD)|(1<<PIN_CYCLE_START))
  • #endif
  • //end zjk
  • #ifdef PIN_MAP_ARDUINO_UNO // AVR 328p, Officially supported by Grbl.
  •   // Serial port pins
  •   #define SERIAL_RX USART_RX_vect
  •   #define SERIAL_UDRE USART_UDRE_vect
  •   // NOTE: All step bit and direction pins must be on the same port.
  •   #define STEPPING_DDR       DDRD
  •   #define STEPPING_PORT      PORTD
  •   #define X_STEP_BIT         2  // Uno Digital Pin 2
  •   #define Y_STEP_BIT         3  // Uno Digital Pin 3
  •   #define Z_STEP_BIT         4  // Uno Digital Pin 4
  •   #define X_DIRECTION_BIT    5  // Uno Digital Pin 5
  •   #define Y_DIRECTION_BIT    6  // Uno Digital Pin 6
  •   #define Z_DIRECTION_BIT    7  // Uno Digital Pin 7
  •   #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
  •   #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
  •   #define STEPPING_MASK (STEP_MASK | DIRECTION_MASK) // All stepping-related bits (step/direction)
  •   #define STEPPERS_DISABLE_DDR    DDRB
  •   #define STEPPERS_DISABLE_PORT   PORTB
  •   #define STEPPERS_DISABLE_BIT    0  // Uno Digital Pin 8
  •   #define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
  •   // NOTE: All limit bit pins must be on the same port
  •   #define LIMIT_DDR       DDRB
  •   #define LIMIT_PIN       PINB
  •   #define LIMIT_PORT      PORTB
  •   #define X_LIMIT_BIT     1  // Uno Digital Pin 9
  •   #define Y_LIMIT_BIT     2  // Uno Digital Pin 10
  •   #define Z_LIMIT_BIT     3  // Uno Digital Pin 11
  •   #define LIMIT_INT       PCIE0  // Pin change interrupt enable pin
  •   #define LIMIT_INT_vect  PCINT0_vect
  •   #define LIMIT_PCMSK     PCMSK0 // Pin change interrupt register
  •   #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
  •   #define SPINDLE_ENABLE_DDR   DDRB
  •   #define SPINDLE_ENABLE_PORT  PORTB
  •   #define SPINDLE_ENABLE_BIT   4  // Uno Digital Pin 12
  •   #define SPINDLE_DIRECTION_DDR   DDRB
  •   #define SPINDLE_DIRECTION_PORT  PORTB
  •   #define SPINDLE_DIRECTION_BIT   5  // Uno Digital Pin 13 (NOTE: D13 can't be pulled-high input due to LED.)
  •   #define COOLANT_FLOOD_DDR   DDRC
  •   #define COOLANT_FLOOD_PORT  PORTC
  •   #define COOLANT_FLOOD_BIT   3  // Uno Analog Pin 3
  •   // NOTE: Uno analog pins 4 and 5 are reserved for an i2c interface, and may be installed at
  •   // a later date if flash and memory space allows.
  •   // #define ENABLE_M7  // Mist coolant disabled by default. Uncomment to enable.
  •   #ifdef ENABLE_M7
  •     #define COOLANT_MIST_DDR   DDRC
  •     #define COOLANT_MIST_PORT  PORTC
  •     #define COOLANT_MIST_BIT   4 // Uno Analog Pin 4
  •   #endif


相关帖子

沙发
TXQDM|  楼主 | 2017-7-8 13:34 | 只看该作者
  •   // NOTE: All pinouts pins must be on the same port
  •   #define PINOUT_DDR       DDRC
  •   #define PINOUT_PIN       PINC
  •   #define PINOUT_PORT      PORTC
  •   #define PIN_RESET        0  // Uno Analog Pin 0
  •   #define PIN_FEED_HOLD    1  // Uno Analog Pin 1
  •   #define PIN_CYCLE_START  2  // Uno Analog Pin 2
  •   #define PINOUT_INT       PCIE1  // Pin change interrupt enable pin
  •   #define PINOUT_INT_vect  PCINT1_vect
  •   #define PINOUT_PCMSK     PCMSK1 // Pin change interrupt register
  •   #define PINOUT_MASK ((1<<PIN_RESET)|(1<<PIN_FEED_HOLD)|(1<<PIN_CYCLE_START))
  • #endif
  • #ifdef PIN_MAP_ARDUINO_MEGA_2560 // Working @EliteEng
  •   // Serial port pins
  •   #define SERIAL_RX USART0_RX_vect
  •   #define SERIAL_UDRE USART0_UDRE_vect
  •   // Increase Buffers to make use of extra SRAM
  •   #define RX_BUFFER_SIZE 256
  •   #define TX_BUFFER_SIZE 128
  •   #define BLOCK_BUFFER_SIZE 36
  •   #define LINE_BUFFER_SIZE 100
  •   // NOTE: All step bit and direction pins must be on the same port.
  •   #define STEPPING_DDR      DDRA
  •   #define STEPPING_PORT     PORTA
  •   #define STEPPING_PIN      PINA
  •   #define X_STEP_BIT        2 // MEGA2560 Digital Pin 24
  •   #define Y_STEP_BIT        3 // MEGA2560 Digital Pin 25
  •   #define Z_STEP_BIT        4 // MEGA2560 Digital Pin 26
  •   #define X_DIRECTION_BIT   5 // MEGA2560 Digital Pin 27
  •   #define Y_DIRECTION_BIT   6 // MEGA2560 Digital Pin 28
  •   #define Z_DIRECTION_BIT   7 // MEGA2560 Digital Pin 29
  •   #define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // All step bits
  •   #define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1<<Z_DIRECTION_BIT)) // All direction bits
  •   #define STEPPING_MASK (STEP_MASK | DIRECTION_MASK) // All stepping-related bits (step/direction)
  •   #define STEPPERS_DISABLE_DDR   DDRB
  •   #define STEPPERS_DISABLE_PORT  PORTB
  •   #define STEPPERS_DISABLE_BIT   7 // MEGA2560 Digital Pin 13
  •   #define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
  •   // NOTE: All limit bit pins must be on the same port
  •   #define LIMIT_DDR       DDRB
  •   #define LIMIT_PORT      PORTB
  •   #define LIMIT_PIN       PINB
  •   #define X_LIMIT_BIT     4 // MEGA2560 Digital Pin 10
  •   #define Y_LIMIT_BIT     5 // MEGA2560 Digital Pin 11
  •   #define Z_LIMIT_BIT     6 // MEGA2560 Digital Pin 12
  •   #define LIMIT_INT       PCIE0  // Pin change interrupt enable pin
  •   #define LIMIT_INT_vect  PCINT0_vect
  •   #define LIMIT_PCMSK     PCMSK0 // Pin change interrupt register
  •   #define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // All limit bits
  •   #define SPINDLE_ENABLE_DDR   DDRC
  •   #define SPINDLE_ENABLE_PORT  PORTC
  •   #define SPINDLE_ENABLE_BIT   2 // MEGA2560 Digital Pin 35
  •   #define SPINDLE_DIRECTION_DDR   DDRC
  •   #define SPINDLE_DIRECTION_PORT  PORTC
  •   #define SPINDLE_DIRECTION_BIT   1 // MEGA2560 Digital Pin 36
  •   #define COOLANT_FLOOD_DDR   DDRC
  •   #define COOLANT_FLOOD_PORT  PORTC
  •   #define COOLANT_FLOOD_BIT   0 // MEGA2560 Digital Pin 37
  •   // #define ENABLE_M7  // Mist coolant disabled by default. Uncomment to enable.
  •   #ifdef ENABLE_M7
  •     #define COOLANT_MIST_DDR   DDRC
  •     #define COOLANT_MIST_PORT  PORTC
  •     #define COOLANT_MIST_BIT   3 // MEGA2560 Digital Pin 34
  •   #endif
  •   // NOTE: All pinouts pins must be on the same port
  •   #define PINOUT_DDR       DDRK
  •   #define PINOUT_PIN       PINK
  •   #define PINOUT_PORT      PORTK
  •   #define PIN_RESET        0  // MEGA2560 Analog Pin 8
  •   #define PIN_FEED_HOLD    1  // MEGA2560 Analog Pin 9
  •   #define PIN_CYCLE_START  2  // MEGA2560 Analog Pin 10
  •   #define PINOUT_INT       PCIE2  // Pin change interrupt enable pin
  •   #define PINOUT_INT_vect  PCINT2_vect
  •   #define PINOUT_PCMSK     PCMSK2 // Pin change interrupt register
  •   #define PINOUT_MASK ((1<<PIN_RESET)|(1<<PIN_FEED_HOLD)|(1<<PIN_CYCLE_START))
  • #endif
  • /*
  • #ifdef PIN_MAP_CUSTOM_PROC
  •   // For a custom pin map or different processor, copy and paste one of the default pin map
  •   // settings above and modify it to your needs. Then, make sure the defined name is also
  •   // changed in the config.h file.
  • #endif
  • */
  • #endif

pinmap中其实定义的是三种单片机的引脚定义,具体使用哪一个在config.h中有定义,如下:[cpp] view plain copy

  • #define PIN_MAP_STM32
  • //#define PIN_MAP_ARDUINO_UNO


由于我修改的是STM32的,所以我额外定义了个STM32的选项,可以看到我使用的是不同通道的IO,所以定义起来就有所小不同,为了尽量少修改GRBL源程序,尽量修改定义这地方的代码,减少调用出代码的修改stepper.c中关于引脚的初始化如下:
[cpp] view plain copy

  • / Initialize and start the stepper motor subsystem
  • void st_init()
  • {
  •   // Configure directions of interface pins
  • //  STEPPING_DDR |= STEPPING_MASK;
  • //  STEPPING_PORT = (STEPPING_PORT & ~STEPPING_MASK) | settings.invert_mask;
  • //  STEPPERS_DISABLE_DDR |= 1<<STEPPERS_DISABLE_BIT;
  •   //ZJK ADD FOR STEP_IO INIT
  •   GPIO_InitTypeDef GPIO_InitStructure;
  •   //X_STEP:PA8
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  •   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  •   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  •   GPIO_Init(GPIOA, &GPIO_InitStructure);
  •   X_STEP_PORT = (X_STEP_PORT & ~X_STEP_MASK) | (settings.invert_mask&X_STEP_MASK);
  •   //Y_STEP:PD15
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
  •   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
  •   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  •   GPIO_Init(GPIOD, &GPIO_InitStructure);
  •   Y_STEP_PORT = (Y_STEP_PORT & ~Y_STEP_MASK) | (settings.invert_mask&Y_STEP_MASK);
  •   //X_DIR :PA6
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  •   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  •   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  •   GPIO_Init(GPIOA, &GPIO_InitStructure);
  •   X_DIRECTION_PORT = (X_DIRECTION_PORT & ~X_DIRECTION_MASK) | (settings.invert_mask&X_DIRECTION_MASK);
  •   //Y_DIR :PA2
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  •   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
  •   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  •   GPIO_Init(GPIOA, &GPIO_InitStructure);
  •   Y_DIRECTION_PORT = (Y_DIRECTION_PORT & ~Y_DIRECTION_MASK) | (settings.invert_mask&Y_DIRECTION_MASK);
  •   //X_RES :PA3
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  •   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  •   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  •   GPIO_Init(GPIOA, &GPIO_InitStructure);
  •   //Y_RES :PA4
  •   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  •   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
  •   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  •   GPIO_Init(GPIOA, &GPIO_InitStructure);
  •   //END ZJK STEPP_IO INIT

[cpp] view plain copy



调用处如下所示:[cpp] view plain copy

  • //定时器4中断服务函数
  • void TIM4_IRQHandler(void) //中断服务函数名一定正确
  • {
  •     if(TIM4->SR&0X0001)//再次判断是否更新事件
  •     {
  •       // Reset stepping pins (leave the direction pins)
  •       //STEPPING_PORT = (STEPPING_PORT & ~STEP_MASK) | (settings.invert_mask & STEP_MASK);
  •       X_STEP_PORT = (X_STEP_PORT & ~X_STEP_MASK) | (settings.invert_mask & X_STEP_MASK);
  •       Y_STEP_PORT = (Y_STEP_PORT & ~Y_STEP_MASK) | (settings.invert_mask & Y_STEP_MASK);
  •       //TCCR2B = 0; // Disable Timer2 to prevent re-entering this interrupt when it's not needed.
  •       //bit0=1关闭定时器
  •       TIM4->CR1&=~0X01;
  •     }
  •     TIM4->SR&=~(1<<0); //状态寄存器清除
  • }

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

110

主题

593

帖子

11

粉丝