STM32F030 有關DMA的CSELR訪問問題

2020-01-10 19:38发布

各位大大好
最近我在嘗試使用DMA去搬移USART的資料
居然發現我不能用DMA1->CSELR去找到並且修改他的寄存器
未命名.png (64.5 KB, 下载次数: 0) 下载附件 2018-6-14 15:04 上传
請問我要怎麼去訪問這個寄存器?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
20061002838
1楼-- · 2020-01-10 20:30
手册上面没有这个寄存器,你看的哪份资料?
陳聖文
2楼-- · 2020-01-11 02:19
 精彩回答 2  元偷偷看……
20061002838
3楼-- · 2020-01-11 03:24
陳聖文 发表于 2018-6-14 15:11
這份的        "10.4.7"

我看的031的手册,我错了,原来两个的DMA不一样啊

查看头文件里面有无这个寄存器,有的话,直接像你写的那样访问就是了
应该是MDK的bug,或者头文件的bug
陳聖文
4楼-- · 2020-01-11 04:11
20061002838 发表于 2018-6-14 15:14
我看的031的手册,我错了,原来两个的DMA不一样啊

查看头文件里面有无这个寄存器,有的话,直接像你写的 ...

可是我是用原生的文件
我重裝看看好了
20061002838
5楼-- · 2020-01-11 06:25
本帖最后由 20061002838 于 2018-6-14 18:46 编辑
陳聖文 发表于 2018-6-14 15:16
可是我是用原生的文件
我重裝看看好了


QQ图片20180614183837.png (41.26 KB, 下载次数: 0)

下载附件

2018-6-14 18:39 上传


改名字了,叫做RMPCR
陳聖文
6楼-- · 2020-01-11 10:57
本帖最后由 陳聖文 于 2018-6-15 15:21 编辑
20061002838 发表于 2018-6-14 18:40
改名字了,叫做RMPCR


我發現我這款不是這樣去選擇的
是從 9.1.1 SYSCFG configuration register 1 (SYSCFG_CFGR1) 去選擇的
其實我的組態設定和概念都沒問題
唯一的問題是我手殘漏打一個字

以下是我原先的組態
  1.                
  2. SYSCFG->CFGR1|=SYSCFG_CFGR1_USART1TX_DMA_RMP;                                //映射到通道4
  3. DMA1_Channel4->CPAR        =                USART1->TDR;                //設定通道2的硬件地址為TDR
  4. DMA1_Channel4->CMAR        =                (uint32_t)(&the_TX_buffer);        //設定通道2的內存地址為the_TX_buffer
  5. DMA1_Channel4->CNDTR=                64;                                                        //資料筆數為64筆,剛好是陣列大小
  6. DMA1_Channel4->CCR        |=        DMA_CCR_PL_0                                        //PL[1:0]被設定為 01 中等優先權
  7.                         |                DMA_CCR_MINC                        //設置內存增量模式
  8.                         |                DMA_CCR_DIR                                //設定資料方向是內存->硬體
  9.                         |                DMA_CCR_EN;                                //致能此通道2
复制代码

以下是我修改後的組態
  1.        
  2. SYSCFG->CFGR1|=SYSCFG_CFGR1_USART1TX_DMA_RMP;                        //映射到通道4
  3. DMA1_Channel4->CPAR        =                (uint32_t)(&USART1->TDR);        //設定通道2的硬件地址為TDR
  4. DMA1_Channel4->CMAR        =                (uint32_t)(&the_TX_buffer);        //設定通道2的內存地址為the_TX_buffer
  5. DMA1_Channel4->CNDTR=                64;                                                        //資料筆數為64筆,剛好是陣列大小
  6. DMA1_Channel4->CCR        |=        DMA_CCR_PL_0                                        //PL[1:0]被設定為 01 中等優先權
  7.                         |                DMA_CCR_MINC                        //設置內存增量模式
  8.                         |                DMA_CCR_DIR                                //設定資料方向是內存->硬體
  9.                         |                DMA_CCR_EN;                                //致能此通道2
  10.                
复制代码

順帶一題原本是映射到通道2和3的
這不是重點,重點是我在CPAR這邊我沒打上'&'
然後,請求一直沒被執行...
整整兩天啊,我的青春

一周热门 更多>