|
刚开始学习 用的朝核2.5 功能:将串口2接收数据存放到内存数组中 ,在WHILE中不停打印出这个数组的值 发现怎么都不对 代码如下:
DMA初始化:
/* DMA 串口接收 配置 */
static void UART_DMARevInit(uint32_t uartInstnace, uint8_t dmaChl, uint8_t * rxBuf)
{
DMA_InitTypeDef DMA_InitStruct1 = {0};
DMA_InitStruct1.chl = dmaChl;
DMA_InitStruct1.chlTriggerSource = UART_RevDMATriggerSourceTable[uartInstnace];
DMA_InitStruct1.triggerSourceMode = kDMA_TriggerSource_Normal;
DMA_InitStruct1.minorLoopByteCnt = 16;
DMA_InitStruct1.majorLoopCnt = 1;
DMA_InitStruct1.sAddr = (uint32_t)&UART2->D;
DMA_InitStruct1.sLastAddrAdj = 0;
DMA_InitStruct1.sAddrOffset = 0;
DMA_InitStruct1.sDataWidth = kDMA_DataWidthBit_8;
DMA_InitStruct1.sMod = kDMA_ModuloDisable;
DMA_InitStruct1.dAddr = (uint32_t)rxBuf;
DMA_InitStruct1.dLastAddrAdj =-16;
DMA_InitStruct1.dAddrOffset = 1;
DMA_InitStruct1.dDataWidth = kDMA_DataWidthBit_8;
DMA_InitStruct1.dMod = kDMA_ModuloDisable;
DMA_Init(&DMA_InitStruct1);
/* 完成 Major Loop 后不停止 Request 继续等待DMA硬件触发源触发 */
// DMA_EnableAutoDisableRequest(dmaChl, false);
}
main中 对串口初始化:
UART_QuickInit(UART2_RX_PD02_TX_PD03, 115200);
/* 配置DMA 打开UART_Rx_DMA功能 */
UART_ITDMAConfig(HW_UART2, kUART_DMA_Rx, true);
UART_DMARevInit(HW_UART2, DMA_REV_CH, UART_Buffer);
DMA_EnableRequest(DMA_REV_CH);
while(1)
{
unsigned char i;
printf("%d =%x\r\n",i,UART_Buffer[i]);
i++;
if(i==16) i=0;
DelayMs(500);
}
输出的数据 :不停的是我接收数组的最后一个值 0x55 (0XAA 0X01 .....最后肯定是0x55) 这样8个字节 一般一次发两组数据 共16个字节。
大家帮我看看 哪里配置的不对 ,实在搞不出来了。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|