硬汉嵌入式论坛

 找回密码
 立即注册
查看: 553|回复: 6
收起左侧

[技术讨论] STM32F103C8T6 DMA搬运1个字节数据到GPIOA_ODR寄存器低八位,数据同时错误出现在高八位,求大佬

[复制链接]

2

主题

3

回帖

9

积分

新手上路

积分
9
发表于 2025-2-8 20:23:15 | 显示全部楼层 |阅读模式
a50dafb22f34c2d45772ebecf6122dc9.png      传输的就是一个 uint8_t 类型的,传输的数据宽度 8位的, 寄存器和内存没有地址增长。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116223
QQ
发表于 2025-2-9 08:20:07 | 显示全部楼层
别用ODR,使用BSRR,直接配置32bit。
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2025-2-9 10:09:58 | 显示全部楼层
eric2013 发表于 2025-2-9 08:20
别用ODR,使用BSRR,直接配置32bit。

我刚刚试了一下,通过 BSRR寄存器,只能使引脚电平变高。 我想要通过 DMA控制 ODR实现PWM的输出  
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116223
QQ
发表于 2025-2-9 11:58:32 | 显示全部楼层
huai520 发表于 2025-2-9 10:09
我刚刚试了一下,通过 BSRR寄存器,只能使引脚电平变高。 我想要通过 DMA控制 ODR实现PWM的输出

BSRR寄存器有高16和低16bit,一个是控制高电平的,一个是控制低电平的。
回复

使用道具 举报

0

主题

2

回帖

2

积分

新手上路

积分
2
发表于 2025-2-10 00:14:15 | 显示全部楼层
32 位外设寄存器必须按字(32 位)写入数据。所有其它外设寄存器则必须按半字(16 位) 或字(32 位)写入数据。而读访问可支持字节(8 位)、半字(16 位)或字(32 位)。
DMA默认搬运8位循环填充了?试试改下变量类型,配置搬运32位。
搬到BSRR的话GPIOX->BSRR=0XFFFF0000 | PATTEN。
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2025-2-10 15:22:29 | 显示全部楼层
eric2013 发表于 2025-2-9 11:58
BSRR寄存器有高16和低16bit,一个是控制高电平的,一个是控制低电平的。

有没有可能是因为 GPIO这内存地址 是不支持 字节或者半字写操作
QQ20250210-152129.png
回复

使用道具 举报

2

主题

3

回帖

9

积分

新手上路

积分
9
 楼主| 发表于 2025-2-10 15:25:19 | 显示全部楼层
wangyi041228 发表于 2025-2-10 00:14
32 位外设寄存器必须按字(32 位)写入数据。所有其它外设寄存器则必须按半字(16 位) 或字(32 位)写入 ...

当DMA模块开始一个AHB的字节或半字写操作时,数据将在HWDATA[31:0]总线中未使用的部
分重复。因此,如果DMA以字节或半字写入不支持字节或半字写操作的AHB设备时(即HSIZE不
适于该模块),不会发生错误.  
但是手册没有体现出哪一些 不支持或支持
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-10 11:25 , Processed in 0.805286 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表