STM32 CubeMX + LL库 读取中空磁环编码器数据

中空磁环编码器

STM32 CubeMX配置

选用串口4

时钟配置

GPIO、DMA配置

开启全局中断

keil 程序

usart.c文件

/* USER CODE BEGIN 0 */
volatile uint8_t rx_len = 0;
volatile uint8_t recv_end_flag = 0;
uint8_t rx_buffer[100]={0};
/* USER CODE END 0 */

main.c文件

串口4配置函数,中断回调函数

/* USER CODE BEGIN PD */

#define UART4_RXBUFF_SIZE 16
uint8_t UART4_RxBuff[UART4_RXBUFF_SIZE];
uint8_t uart4_recv_flag = 0;
uint8_t cnt;
uint16_t DecValue;

void Uart4Config(void)
{
    LL_DMA_SetPeriphAddress(DMA2, LL_DMA_CHANNEL_3, (uint32_t)(&UART4->DR));
    LL_DMA_SetMemoryAddress(DMA2, LL_DMA_CHANNEL_3, (uint32_t)UART4_RxBuff);
    LL_DMA_SetDataLength(DMA2, LL_DMA_CHANNEL_3, UART4_RXBUFF_SIZE);
    LL_DMA_EnableChannel(DMA2, LL_DMA_CHANNEL_3);
    LL_USART_EnableDirectionRx(UART4);
    LL_USART_EnableDMAReq_RX(UART4);
    LL_USART_ClearFlag_TC(UART4);
    LL_USART_EnableIT_IDLE(UART4);

}


void UART4_IRQHandlerCallback(void)
{
    if(LL_USART_IsActiveFlag_IDLE(UART4))
    {
        LL_DMA_DisableChannel(DMA2, LL_DMA_CHANNEL_3);

        uint8_t cnt = UART4_RXBUFF_SIZE - LL_DMA_GetDataLength(DMA2, LL_DMA_CHANNEL_3);
        LL_DMA_SetDataLength(DMA2, LL_DMA_CHANNEL_3, UART4_RXBUFF_SIZE);
        LL_DMA_EnableChannel(DMA2, LL_DMA_CHANNEL_3);
        LL_USART_ClearFlag_IDLE(UART4);
        uart4_recv_flag = cnt;
    }
    //编码器数据转换为0--16383
	DecValue = (UART4_RxBuff[3] << 8) | UART4_RxBuff[2];//编码器数据转换为0--16383
}

/* USER CODE END PD */

  /* USER CODE BEGIN 2 */
  Uart4Config();
  /* USER CODE END 2 */

  while (1)
  {
	  LL_USART_TransmitData8(UART4, 0x02);
	  LL_mDelay(10);
  }

stm32f1xx_it.c文件

将UART4_IRQHandlerCallback()放入UART4_IRQHandler中断处理函数

void UART4_IRQHandler(void)
{
  /* USER CODE BEGIN UART4_IRQn 0 */、

	UART4_IRQHandlerCallback();

  /* USER CODE END UART4_IRQn 0 */
  /* USER CODE BEGIN UART4_IRQn 1 */

  /* USER CODE END UART4_IRQn 1 */
}

串口助手发送0x02,即可收到返回数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值