芯片:H750
工具:cubemx? Keil5
cubemx主要配置:
时钟:最大时钟480MHZ。
定时器:开个定时中断即可。
在初始化时,记得添加函数
HAL_TIM_Base_Start_IT(&htim1);
usart配置:
DMA配置:
中断:
定制器中断? 300us左右
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
HAL_UART_Transmit_IT(&huart1,&EncoderID,1);
HAL_UART_Receive_DMA(&huart1,(uint8_t*)aRxBuffer,11);
}
发送中断:
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
//可以把DMA接收放在这个地方 。观测GPIO时,整个工程仅进入一次。
}
接收中断:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
//全部接收完毕进入该中断
}
DMA接收中断:这个中断有点奇怪,进去了几次,没有找到规律。
void DMA1_Stream0_IRQHandler(void)
{
/* USER CODE BEGIN DMA1_Stream0_IRQn 0 */
HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_8); //测试用
/* USER CODE END DMA1_Stream0_IRQn 0 */
HAL_DMA_IRQHandler(&hdma_usart1_rx);
/* USER CODE BEGIN DMA1_Stream0_IRQn 1 */
/* USER CODE END DMA1_Stream0_IRQn 1 */
}
调试结果:圈内分别是单圈信息和多圈信息。放在接收中断或其他地方。
|