有花堪折
获得 0 次赞
帮助过91人
应用: 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如何与L298N相连?L298N的使能信号是max=5V,但是STM32输出的信号是3.3V大家是直接把STM32的PWM输出引脚接到L298N的使能控制端吗?
// 要求:按下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; } } }