- 打卡等级:初来乍到
- 打卡总天数:5
- 最近打卡:2026-04-14 10:21:15
新手上路
- 积分
- 33
|
步骤大概知道一些,就是不太清楚怎么调用
下面的就是调用了,不管怎么写,串口都不打印
BOOL fPrintfBusy;
uint8_t xdata UART2_DAM1[16]; //串口2DMA发送缓冲区数组
uint8_t xdata UART2_DAM2[16]; //串口2DMA接收缓冲区数组
uint8_t xdata UART2_RX_BUF[32]; // 最终接收数据
uint8_t UART2_RX_LEN = 0; // 收到的长度
bit UART2_RX_OK = 0; // 接收完成标志
////////////////////////////////////////
// 串口2接收DMA中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void DMA_UART2RX_ISR(void) interrupt DMA_UR2R_VECTOR
{
//<<AICUBE_USER_UART2_ISR_CODE3_BEGIN>>
// 在此添加中断函数用户代码
uint8_t i;
if (DMA_UART2_CheckRxFlag()) //判断串口接收DMA中断
{
DMA_UART2_ClearRxFlag(); //清除串口接收DMA中断标志
// 把 DMA 收到的数据拷贝到应用缓冲区
UART2_RX_LEN = 15; // 你设置的是16字节
for(i=0; i<UART2_RX_LEN; i++)
{
UART2_RX_BUF = UART2_DAM2;
}
UART2_RX_OK = 1; // 标记:一帧数据接收完成
DMA_UART2_ClearFIFO();
// 重新启动 DMA 接收,等待下一次数据
DMA_UART2_SetRxAmount(15);
DMA_UART2_SetRxAddress(UART2_DAM2);
DMA_UART2_EnableRx();
}
//<<AICUBE_USER_UART2_ISR_CODE3_END>>
}
////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
uint8_t i;
SYS_Init();
while (1)
{
// DMA 接收完成
if(UART2_RX_OK)
{
printf("DMA收到数据:");
for(i=0; i<UART2_RX_LEN; i++)
{
printf("%c",UART2_RX_BUF);
}
printf("\r\n");
// 清空标志,准备下一次接收
UART2_RX_OK = 0;
UART2_RX_LEN = 0;
//memset(UART2_RX_BUF, 0, sizeof(UART2_RX_BUF));//清空缓存区
}
}
} |
|