头像-86819

有花堪折

  • 北京市北京市
  • RF/无线
  • 消费电子

个人成就

获得 0 次赞

帮助过69人

求使用DMA进行串口接收的问题

应用: STM32F405, 串口使用DMA接收,接收数据大小不定, 问题:我通过上位机给STM发送数据(数据大小不定,小于256),第一次发送时,接收正常 之后再发送时,能够进入串口中断,但没有数据,读到的dma_cnt一直是256,这个可能的原因是什么呢? 主要程序如下:      RECVBUFF_SIZE=256 void Debug_USART_Config(void) { NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=DEBUG_PREE_PRIO; NVIC_InitStructure.NVIC_IRQChannelSubPriority = DEBUG_SUB_PRIO; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);         USART_Init(DEBUG_USART &USART_InitStructure); USART_ITConfig(DEBUG_USART USART_IT_IDLE ENABLE); USART_DMACmd(DEBUG_USARTUSART_DMAReq_RxENABLE);         USART_Cmd(DEBUG_USART ENABLE);         DMA_DeInit(DEBUG_USART_DMA_STREAM); while (DMA_GetCmdStatus(DEBUG_USART_DMA_STREAM) != DISABLE){}         DMA_InitStructure.DMA_Channel = DEBUG_USART_DMA_CHANNEL;           DMA_InitStructure.DMA_PeripheralbaseAddr = DEBUG_USART_DR_base;           DMA_InitStructure.DMA_Memory0baseAddr = (u32)RecvBuff;         DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;         DMA_InitStructure.DMA_BufferSize = RECVBUFF_SIZE;   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;   DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;     DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;   DMA_Init(DEBUG_USART_DMA_STREAM &DMA_InitStructure);   DMA_Cmd(DEBUG_USART_DMA_STREAM ENABLE); while (DMA_GetCmdStatus(DEBUG_USART_DMA_STREAM) != ENABLE){} } void USART1_IRQHandler(void) { uint16_t dma_cnt;     if(USART_GetITStatus(DEBUG_USART USART_IT_IDLE) != RESET)     {         USART_ReceiveData(DEBUG_USART); dma_cnt = DMA_GetCurrDataCounter(DEBUG_USART_DMA_STREAM);         uart1_rev_len =RECVBUFF_SIZE-dma_cnt;         if(uart1_rev_len != 0)         {    uart_parse(RecvBuff);             hw_memset(RecvBuff0sizeof(RecvBuff));         }         USART_ClearITPendingBit(DEBUG_USARTUSART_IT_IDLE);         DMA_Cmd(DEBUG_USART_DMA_STREAM DISABLE ); while (DMA_GetCmdStatus(DEBUG_USART_DMA_STREAM) != DISABLE){}        DMA_SetCurrDataCounter(DEBUG_USART_DMA_STREAMRECVBUFF_SIZE);        DMA_Cmd(DEBUG_USART_DMA_STREAM ENABLE);     } } uart_parse(RecvBuff)是解析收到的数据, 另外如果串口中断最后,加while (DMA_GetCmdStatus(DEBUG_USART_DMA_STREAM) != ENABLE){}的话 程序会卡死在while循环里

弹簧天线应该如何选购 弹簧天线都要做天线阻抗匹配吗?

BAIDU_CLB_fillSlot%28%22200780%22%29%3B 弹簧天线应该如何选购 弹簧天线都要做天线阻抗匹配吗?

请教一个热敏电阻问题

假设热量一直增加,热敏电阻的阻值也一直增加,如果电阻限流那此时是不是电流越来越小,电压越来越大

为何随机数总是固定数?

#include<reg51.h> #include<stdlib.h> sbit c=P2^0; void main() { unsigned char a[]={0xc00xf90xa40xb00x990x920x820xf80x800x90}; P0=a[rand()%10]; c=0; while (1)         ; } 以上是源程序,P0连接共阳数码管,P2.0控制数码管阳极,随机数函数产生一个随机数给P0,应该是每次数都不一样,现在是每次运行都产生7,无论重启还是开机。

stm32 pwm l298n使能信号问题

stm32如何与L298N相连?L298N的使能信号是max=5V,但是STM32输出的信号是3.3V大家是直接把STM32的PWM输出引脚接到L298N的使能控制端吗?

关于单片机灯光控制需要加什么

用8*8发光二极管,做矩阵,编程控制闪光效果,弄了一下,灯不亮,没有低电平,单片机接二极管的时候需要加什么?限流电阻大约多大?能不能提供一张原理图

单片机控制独立键盘相关程序问题

// 要求:按下key1时led电点亮,按下key2时熄灭 //问题;按下key1时能点亮led,但是按下key2时不能熄灭 #include<reg52.h> sbit led=P1^0; sbit key1=P3^0; sbit key2=P3^2; void delay(int x) { int yz; for(z=x;z>0;z--)   for(y=114;y>0;y--); } void main() { while(1) {   if(key1==0)    {     delay(20);     if(key1==0)     led=0;    } else if(key2==0) { delay(20);   if(key2==0)    led=0xff; }   }    }

使用jlink下载程出错

使用jlink下载程序时出现No Cortex-M Device found  in  GTAG  chain