搞这个,起因呢,公司产品里ZigBee模块固件版本不对,一大批产品需要二次升级。
需要升级的ZigBee模块是直接与stm32相连的,没有引出升级口,所以得搞个串口直通程序,通过232转MCU再转ZigBee,来进行升级。
一开始直接中断互通,结果呢,通倒是可以通,一升级固件就不行了,大概是因为数据量较大吧。
所以用了DMA,之前也没用过DMA,就慢慢学慢慢模仿着改呗。
这里要涉及到一个点,DMA的外设到外设,经常写的是,DMA只有外设到内存、内存到外设、内存到内存三种模式。
实际上,DMA是可以外设直接到外设的,而且用法非常非常简单,直接设置成外设到内存或内存到外设模式,然后把内存直接改成外设的地址,就可以了。
下面是我的程序,单片机是STM32F407,usart3和usart6 互通。
https://download.csdn.net/download/qq_36192233/11983754
说是互通,其实只有一路是DMA外设到外设。
一方面,只有下载一向有大量数据;一方面,usart3返回usart6,DMA外设到外设行不通。
这一点卡了我很久,一路我没多久就调好了,但返回的那一路我懵了几天。
我就搞不懂,凭啥数据进的来回不去,明明是几乎一模一样的配置。
我以为是配置问题,各种在网上找DMA配置的程序,然后对比参照着改配置,无果。
最后才发现,这一路就是通不了的。
注意图片下那一行,简单地说,所有的用DMA1的外设,都搞不通,人家DMA1外设端口压根不在总线矩阵。
所以,用外设到外设之前,必须得先考虑一下这一点,不行的话,还是老老实实配两次DMA加好中断吧。
特别是stm32F4系列,据说f1系列都是可以的
设计资源 培训 开发板 精华推荐
- 电赛作业2596可调电源
- LTC3621EDCB-2 1.2Vout、强制连续模式、1MHz 同步降压型稳压器的典型应用
- 101020054, Grove - 3 轴数字加速度计 (±16g) 评估套件
- RDR-848 - 42W 双端口隔离反激式电源,具有 30W USB PD 3.0 和 12 W USB-A 端口,使用 InnoSwitch3-Pro 和 PowiGaN 技术 (INN3379C-H302)
- LT3091MPR 低噪声 4 象限电源的典型应用
- NCV2904DR2G高阻差分放大器典型应用
- 基于单片机的烟叶烘烤过程温湿度报警系统(含proteus原理图和c源程序)
- #第二届立创大赛#立志创新——电子积木
- tennsy2.0++键盘:JIS-BIG
- 5.1V/12V 多电源的典型应用电路,注意 L4974A 和 L4970A、3.5A 开关稳压器之间的同步