
STM32CUBEIDE
USB_CDC_HOST 标准库里边USBH_DeAllocate_AllChannel()函数的疑问?
STM32会存在单个IO口坏掉的情况吗?
STM32部署机器学习算法硬件至少要使用哪个系列的芯片?
STM32L433VCT6 进入STOP模式2之后,功耗依然和正常运行模式没有差别,请教大神
重新配置SCB->VTOR = 0x08010000后,再次复位,程序异常,发现不进tick中断,IIC读数卡死在准备查询循环中。
uboot初始化IIC1,跳转到应用程序中后,先读一字节AT24C04的数据,然后初始化IIC1(未复位),再读一字节AT24C04时,有概率一直检测到IIC处于busy状态。
STM32F407的flash读写问题
keil调试阶段无法进行仿真,能进到仿真界面,但是无法执行程序,这个怎么解决?
STM32F4的IO口5V容忍问题
具体你这里,应该是DMA半完成中断进了一次,我们的库代码就是这样设计的。
DMA半完成中断也是默认开启的。
其实你很好验证这点,比方DMA长度1024不变,你一次性数据只发送 不超过512的数据看看。
或者用另一个STM32F4当主机发送数据试试看。
目前我是通过电脑抓包工具,520个字节是一次性发送的。的确没考虑到用其他stm32 发送数据,现在我短接rx与tx 看下结果
把空闲中断关了
使用短接rx与tx 问题依旧存在,示波器抓取波形,串口发送数据,字节与字节之间并未出现明显断帧现象,怀疑可能是本身芯片的闲时中断就设置了最大接收长度,但在勘误手册都没提到这点
关闲时中断那肯定没问题的,我定时器轮询读取dma接收剩余长度是正常的
rx对应的寄存器是固定的,DMA就是把这个往外面搬运怎么会有上限呢
DMA通道最大搬运65535个
DMA使用基本的单次字节采集模式,开启接收如下所示:HAL_UARTEx_ReceiveToIdle_DMA(&huart3,(uint8_t *)g_u8RxData,USART_RX_MAX);
串口闲时中断数据:在void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)中实现原理如下:
HAL_UART_AbortReceive(&huart3);//关闭串口DMA接收 g_u16RxCnt=USART_RX_MAX-__HAL_DMA_GET_COUNTER(&hdma_usart3_rx);//获取DMA接收的数据长度
HAL_UARTEx_ReceiveToIdle_DMA(&huart3,(uint8_t *)g_u8RxData,USART_RX_MAX);//重新开始接收数据
以上操作发现上位机一次发送520个字节数据后,串口中断进入了两次,获取DMA接收的数据长度分别位272,248。使用的芯片为STM32F407ZGT6,主频168MHz,大家有条件可以试试
的确,DMA半完成中断很有说服性,我先看下代码,再修改最大接收长度试试。
其实 我昨天已经验证过了。你可以再验证下。
的确,重新看了一下代码,在半完成中断事件中也实现了void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size),所有我在开启DMA闲时中断后,关闭了半完成中断,解决问题。
65535个是字节还是位 啊?
65535个数据,肯定不是65535个位,可能是字节、半字、字。但某些STM32系列统一为字节个数。你要适当看看相应的手册。