step motor turns, minimal example

dma
Eggert Jung 6 months ago
parent 096c40d216
commit 97c86af4b7

@ -145,6 +145,7 @@ void USART1_IRQHandler(){
}
if(USART1->ISR & USART_ISR_FE){
//TODO read rx==0
USART1->ICR = USART_ICR_FECF;
//if(rxBufferPos != 514)
// printf("FE after %d\n",rxBufferPos);
@ -182,6 +183,27 @@ void DMA1_Channel1_IRQHandler(){
SEGGER_SYSVIEW_PrintfHost("DMA");
SEGGER_SYSVIEW_RecordExitISR();
}
void init_stepper(){
RCC->IOPENR |= RCC_IOPENR_GPIOBEN;
RCC->IOPENR |= RCC_IOPENR_GPIOCEN;
RCC->IOPENR |= RCC_IOPENR_GPIOEEN;
// Set to output (00: Input, 01: Output, 10: Alternate function, 11: Analog)
// PB4 Direction
GPIOB->MODER &= ~(0x3 << (4 * 2)); // Clear mode bits for PB4
GPIOB->MODER |= (0x1 << (4 * 2)); // Set mode to output for PB4
// PC11 Enable
GPIOC->MODER &= ~(0x3 << (11 * 2)); // Clear mode bits for PC11
GPIOC->MODER |= (0x1 << (11 * 2)); // Set mode to output for PC11
// PE2 Step
GPIOE->MODER &= ~(0x3 << (2 * 2)); // Clear mode bits for PE2
GPIOE->MODER |= (0x1 << (2 * 2)); // Set mode to output for PE2
GPIOC->BSRR |= GPIO_BSRR_BS11;
}
/* USER CODE END 0 */
/**
@ -190,9 +212,8 @@ void DMA1_Channel1_IRQHandler(){
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
@ -218,11 +239,13 @@ int main(void)
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
init_UART1_dma();
init_stepper();
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
//HAL_UART_Receive_DMA(&huart1, rxBuffer, BUFFER_SIZE);
uint16_t cnt = 0;
while (1)
{
printf("buf: ");
@ -230,6 +253,10 @@ int main(void)
printf("0x%02X ", rxBuffer[i]);
printf("\n");
SEGGER_SYSVIEW_OnIdle();
if(cnt++ >= 260-rxBuffer[1]){
cnt = 0;
GPIOE->ODR ^= GPIO_ODR_OD2;
}
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */

Loading…
Cancel
Save