加入大疆C板例程bsp

This commit is contained in:
2026-04-12 20:34:47 +08:00
parent 7475077b9e
commit b68ac54a34
51 changed files with 5950 additions and 1290 deletions

193
bsp/boards/bsp_usart.c Normal file
View File

@@ -0,0 +1,193 @@
#include "bsp_usart.h"
#include "main.h"
extern UART_HandleTypeDef huart1;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern UART_HandleTypeDef huart6;
extern DMA_HandleTypeDef hdma_usart6_rx;
extern DMA_HandleTypeDef hdma_usart6_tx;
void usart1_init(uint8_t *rx1_buf, uint8_t *rx2_buf, uint16_t dma_buf_num)
{
//enable the DMA transfer for the receiver and tramsmit request
//使能DMA串口接收和发送
SET_BIT(huart1.Instance->CR3, USART_CR3_DMAR);
SET_BIT(huart1.Instance->CR3, USART_CR3_DMAT);
//enalbe idle interrupt
//使能空闲中断
__HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
//disable DMA
//失效DMA
__HAL_DMA_DISABLE(&hdma_usart1_rx);
while(hdma_usart1_rx.Instance->CR & DMA_SxCR_EN)
{
__HAL_DMA_DISABLE(&hdma_usart1_rx);
}
__HAL_DMA_CLEAR_FLAG(&hdma_usart1_rx, DMA_LISR_TCIF1);
hdma_usart1_rx.Instance->PAR = (uint32_t) & (USART1->DR);
//memory buffer 1
//内存缓冲区1
hdma_usart1_rx.Instance->M0AR = (uint32_t)(rx1_buf);
//memory buffer 2
//内存缓冲区2
hdma_usart1_rx.Instance->M1AR = (uint32_t)(rx2_buf);
//data length
//数据长度
__HAL_DMA_SET_COUNTER(&hdma_usart1_rx, dma_buf_num);
//enable double memory buffer
//使能双缓冲区
SET_BIT(hdma_usart1_rx.Instance->CR, DMA_SxCR_DBM);
//enable DMA
//使能DMA
__HAL_DMA_ENABLE(&hdma_usart1_rx);
//disable DMA
//失效DMA
__HAL_DMA_DISABLE(&hdma_usart1_tx);
while(hdma_usart1_tx.Instance->CR & DMA_SxCR_EN)
{
__HAL_DMA_DISABLE(&hdma_usart1_tx);
}
hdma_usart1_tx.Instance->PAR = (uint32_t) & (USART1->DR);
usart1_tx_dma_init();
}
void usart1_tx_dma_init(void)
{
//enable the DMA transfer for the receiver and tramsmit request
//使能DMA串口接收和发送
SET_BIT(huart1.Instance->CR3, USART_CR3_DMAR);
SET_BIT(huart1.Instance->CR3, USART_CR3_DMAT);
//disable DMA
//失效DMA
__HAL_DMA_DISABLE(&hdma_usart1_tx);
while(hdma_usart1_tx.Instance->CR & DMA_SxCR_EN)
{
__HAL_DMA_DISABLE(&hdma_usart1_tx);
}
hdma_usart1_tx.Instance->PAR = (uint32_t) & (USART1->DR);
hdma_usart1_tx.Instance->M0AR = (uint32_t)(NULL);
hdma_usart1_tx.Instance->NDTR = 0;
}
void usart1_tx_dma_enable(uint8_t *data, uint16_t len)
{
//disable DMA
//失效DMA
__HAL_DMA_DISABLE(&hdma_usart1_tx);
while(hdma_usart1_tx.Instance->CR & DMA_SxCR_EN)
{
__HAL_DMA_DISABLE(&hdma_usart1_tx);
}
__HAL_DMA_CLEAR_FLAG(&hdma_usart1_tx, DMA_HISR_TCIF7);
hdma_usart1_tx.Instance->M0AR = (uint32_t)(data);
__HAL_DMA_SET_COUNTER(&hdma_usart1_tx, len);
__HAL_DMA_ENABLE(&hdma_usart1_tx);
}
void usart6_init(uint8_t *rx1_buf, uint8_t *rx2_buf, uint16_t dma_buf_num)
{
//enable the DMA transfer for the receiver and tramsmit request
//使能DMA串口接收和发送
SET_BIT(huart6.Instance->CR3, USART_CR3_DMAR);
SET_BIT(huart6.Instance->CR3, USART_CR3_DMAT);
//enalbe idle interrupt
//使能空闲中断
__HAL_UART_ENABLE_IT(&huart6, UART_IT_IDLE);
//disable DMA
//失效DMA
__HAL_DMA_DISABLE(&hdma_usart6_rx);
while(hdma_usart6_rx.Instance->CR & DMA_SxCR_EN)
{
__HAL_DMA_DISABLE(&hdma_usart6_rx);
}
__HAL_DMA_CLEAR_FLAG(&hdma_usart6_rx, DMA_LISR_TCIF1);
hdma_usart6_rx.Instance->PAR = (uint32_t) & (USART6->DR);
//memory buffer 1
//内存缓冲区1
hdma_usart6_rx.Instance->M0AR = (uint32_t)(rx1_buf);
//memory buffer 2
//内存缓冲区2
hdma_usart6_rx.Instance->M1AR = (uint32_t)(rx2_buf);
//data length
//数据长度
__HAL_DMA_SET_COUNTER(&hdma_usart6_rx, dma_buf_num);
//enable double memory buffer
//使能双缓冲区
SET_BIT(hdma_usart6_rx.Instance->CR, DMA_SxCR_DBM);
//enable DMA
//使能DMA
__HAL_DMA_ENABLE(&hdma_usart6_rx);
//disable DMA
//失效DMA
__HAL_DMA_DISABLE(&hdma_usart6_tx);
while(hdma_usart6_tx.Instance->CR & DMA_SxCR_EN)
{
__HAL_DMA_DISABLE(&hdma_usart6_tx);
}
hdma_usart6_tx.Instance->PAR = (uint32_t) & (USART6->DR);
}
void usart6_tx_dma_enable(uint8_t *data, uint16_t len)
{
//disable DMA
//失效DMA
__HAL_DMA_DISABLE(&hdma_usart6_tx);
while(hdma_usart6_tx.Instance->CR & DMA_SxCR_EN)
{
__HAL_DMA_DISABLE(&hdma_usart6_tx);
}
__HAL_DMA_CLEAR_FLAG(&hdma_usart6_tx, DMA_HISR_TCIF6);
hdma_usart6_tx.Instance->M0AR = (uint32_t)(data);
__HAL_DMA_SET_COUNTER(&hdma_usart6_tx, len);
__HAL_DMA_ENABLE(&hdma_usart6_tx);
}