关于STM32DMA寄存器的位操作测试不行?其它外设可以用!
不知道 STM32 的DMA 有没有位操作! 如果去写相应的位 MCU 就死掉了!
DDDD
帮忙确认下可以用不?
#define DMA1_Channel3_CCR_EN (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (0*4))))
#define DMA1_Channel3_CCR_TCIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (1*4))))
#define DMA1_Channel3_CCR_HTIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (2*4))))
#define DMA1_Channel3_CCR_TEIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (3*4))))
#define DMA1_Channel3_CCR_DIR (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (4*4))))
#define DMA1_Channel3_CCR_CIRC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (5*4))))
#define DMA1_Channel3_CCR_PINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (6*4))))
#define DMA1_Channel3_CCR_MINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (7*4))))
#define DMA1_Channel3_CCR_PSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (8*4))))
#define DMA1_Channel3_CCR_PSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (9*4))))
#define DMA1_Channel3_CCR_MSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (10*4))))
#define DMA1_Channel3_CCR_MSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (11*4))))
#define DMA1_Channel3_CCR_PL0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (12*4))))
#define DMA1_Channel3_CCR_PL1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (13*4))))
#define DMA1_Channel3_CCR_MEM2MEM (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (14*4))))
没人知道??? DMA 不用 位段操作就完全正常!
请楼主再说详细一点
你在操作DMA寄存器的哪个位时MCU死掉了?你是如何操作的?你是如何判断MCU死掉了?
DD
DMA1_Channel2_CCR &= 0xFFFFFFFE ; 这样操作就 OK 程序运行正常!
DMA1_Channel2_CCR_EN = 0 ; 用位段操作 位 0 就程序 死了!
怎么死的我不清楚! 用用 ISP 下载下去跑的 !
#define DMA1_Channel2_CCR_EN (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (0*4))))
这是 CCR 位 0 地定义! 后来测试了下! 只要是 DMA 的 位都不正常! 不知道怎么会事?
DD
我操作 GPIO SPI USART 其它都用了 位段 那些都是可以的!
香主帮忙看看! 现在不用位段操作整个程序是没问题的!
就是那个操作改成位段操作就出了问题?
DD
/***************************************************************************
** DMA1
***************************************************************************/
#define DMA1_ISR (*((volatile unsigned long *) DMA1_BASE ))
#define DMA1_IFCR (*((volatile unsigned long *) (DMA1_BASE+4) ))
#define DMA1_ISR_GIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (0*4))))
#define DMA1_ISR_TCIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (1*4))))
#define DMA1_ISR_HTIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (2*4))))
#define DMA1_ISR_TEIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (3*4))))
#define DMA1_ISR_GIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (4*4))))
#define DMA1_ISR_TCIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (5*4))))
#define DMA1_ISR_HTIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (6*4))))
#define DMA1_ISR_TEIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (7*4))))
#define DMA1_ISR_GIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (8*4))))
#define DMA1_ISR_TCIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (9*4))))
#define DMA1_ISR_HTIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (10*4))))
#define DMA1_ISR_TEIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (11*4))))
#define DMA1_ISR_GIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (12*4))))
#define DMA1_ISR_TCIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (13*4))))
#define DMA1_ISR_HTIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (14*4))))
#define DMA1_ISR_TEIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (15*4))))
#define DMA1_ISR_GIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (16*4))))
#define DMA1_ISR_TCIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (17*4))))
#define DMA1_ISR_HTIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (18*4))))
#define DMA1_ISR_TEIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (19*4))))
#define DMA1_ISR_GIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (20*4))))
#define DMA1_ISR_TCIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (21*4))))
#define DMA1_ISR_HTIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (22*4))))
#define DMA1_ISR_TEIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (23*4))))
#define DMA1_ISR_GIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (24*4))))
#define DMA1_ISR_TCIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (25*4))))
#define DMA1_ISR_HTIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (26*4))))
#define DMA1_ISR_TEIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32) + (27*4))))
#define DMA1_IFCR_CGIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (0*4))))
#define DMA1_IFCR_CTCIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (1*4))))
#define DMA1_IFCR_CHTIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (2*4))))
#define DMA1_IFCR_CTEIF1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (3*4))))
#define DMA1_IFCR_CGIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (4*4))))
#define DMA1_IFCR_CTCIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (5*4))))
#define DMA1_IFCR_CHTIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (6*4))))
#define DMA1_IFCR_CTEIF2 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (7*4))))
#define DMA1_IFCR_CGIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (8*4))))
#define DMA1_IFCR_CTCIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (9*4))))
#define DMA1_IFCR_CHTIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (10*4))))
#define DMA1_IFCR_CTEIF3 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (11*4))))
#define DMA1_IFCR_CGIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (12*4))))
#define DMA1_IFCR_CTCIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (13*4))))
#define DMA1_IFCR_CHTIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (14*4))))
#define DMA1_IFCR_CTEIF4 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (15*4))))
#define DMA1_IFCR_CGIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (16*4))))
#define DMA1_IFCR_CTCIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (17*4))))
#define DMA1_IFCR_CHTIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (18*4))))
#define DMA1_IFCR_CTEIF5 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (19*4))))
#define DMA1_IFCR_CGIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (20*4))))
#define DMA1_IFCR_CTCIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (21*4))))
#define DMA1_IFCR_CHTIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (22*4))))
#define DMA1_IFCR_CTEIF6 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (23*4))))
#define DMA1_IFCR_CGIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (24*4))))
#define DMA1_IFCR_CTCIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (25*4))))
#define DMA1_IFCR_CHTIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (26*4))))
#define DMA1_IFCR_CTEIF7 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+4)*32) + (27*4))))
/***************************************************************************
** DMA1_Channel1
***************************************************************************/
#define DMA1_Channel1_CCR (*((volatile unsigned long *) DMA1_Channel1_BASE ))
#define DMA1_Channel1_CNDTR (*((volatile unsigned long *) (DMA1_Channel1_BASE+4) ))
#define DMA1_Channel1_CPAR (*((volatile unsigned long *) (DMA1_Channel1_BASE+8) ))
#define DMA1_Channel1_CMAR (*((volatile unsigned long *) (DMA1_Channel1_BASE+12) ))
#define DMA1_Channel1_CCR_EN (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (0*4))))
#define DMA1_Channel1_CCR_TCIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (1*4))))
#define DMA1_Channel1_CCR_HTIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (2*4))))
#define DMA1_Channel1_CCR_TEIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (3*4))))
#define DMA1_Channel1_CCR_DIR (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (4*4))))
#define DMA1_Channel1_CCR_CIRC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (5*4))))
#define DMA1_Channel1_CCR_PINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (6*4))))
#define DMA1_Channel1_CCR_MINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (7*4))))
#define DMA1_Channel1_CCR_PSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (8*4))))
#define DMA1_Channel1_CCR_PSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (9*4))))
#define DMA1_Channel1_CCR_MSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (10*4))))
#define DMA1_Channel1_CCR_MSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (11*4))))
#define DMA1_Channel1_CCR_PL0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x08) + (12*4))))
#define DMA1_Channel1_CCR_PL1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x08) + (13*4))))
#define DMA1_Channel1_CCR_MEM2MEM (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x08)*32) + (14*4))))
/***************************************************************************
** DMA1_Channel2
***************************************************************************/
#define DMA1_Channel2_CCR (*((volatile unsigned long *) DMA1_Channel2_BASE ))
#define DMA1_Channel2_CNDTR (*((volatile unsigned long *) (DMA1_Channel2_BASE+4) ))
#define DMA1_Channel2_CPAR (*((volatile unsigned long *) (DMA1_Channel2_BASE+0x08) ))
#define DMA1_Channel2_CMAR (*((volatile unsigned long *) (DMA1_Channel2_BASE+0x0C) ))
#define DMA1_Channel2_CCR_EN (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (0*4))))
#define DMA1_Channel2_CCR_TCIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (1*4))))
#define DMA1_Channel2_CCR_HTIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (2*4))))
#define DMA1_Channel2_CCR_TEIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (3*4))))
#define DMA1_Channel2_CCR_DIR (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (4*4))))
#define DMA1_Channel2_CCR_CIRC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (5*4))))
#define DMA1_Channel2_CCR_PINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (6*4))))
#define DMA1_Channel2_CCR_MINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (7*4))))
#define DMA1_Channel2_CCR_PSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (8*4))))
#define DMA1_Channel2_CCR_PSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (9*4))))
#define DMA1_Channel2_CCR_MSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (10*4))))
#define DMA1_Channel2_CCR_MSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (11*4))))
#define DMA1_Channel2_CCR_PL0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x1C) + (12*4))))
#define DMA1_Channel2_CCR_PL1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE)*32+0x1C) + (13*4))))
#define DMA1_Channel2_CCR_MEM2MEM (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x1C)*32) + (14*4))))
/***************************************************************************
** DMA1_Channel3
***************************************************************************/
#define DMA1_Channel3_CCR (*((volatile unsigned long *) DMA1_Channel3_BASE ))
#define DMA1_Channel3_CNDTR (*((volatile unsigned long *) (DMA1_Channel3_BASE+4) ))
#define DMA1_Channel3_CPAR (*((volatile unsigned long *) (DMA1_Channel3_BASE+8) ))
#define DMA1_Channel3_CMAR (*((volatile unsigned long *) (DMA1_Channel3_BASE+12) ))
#define DMA1_Channel3_CCR_EN (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (0*4))))
#define DMA1_Channel3_CCR_TCIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (1*4))))
#define DMA1_Channel3_CCR_HTIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (2*4))))
#define DMA1_Channel3_CCR_TEIE (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (3*4))))
#define DMA1_Channel3_CCR_DIR (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (4*4))))
#define DMA1_Channel3_CCR_CIRC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (5*4))))
#define DMA1_Channel3_CCR_PINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (6*4))))
#define DMA1_Channel3_CCR_MINC (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (7*4))))
#define DMA1_Channel3_CCR_PSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (8*4))))
#define DMA1_Channel3_CCR_PSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (9*4))))
#define DMA1_Channel3_CCR_MSIZE0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (10*4))))
#define DMA1_Channel3_CCR_MSIZE1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (11*4))))
#define DMA1_Channel3_CCR_PL0 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (12*4))))
#define DMA1_Channel3_CCR_PL1 (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (13*4))))
#define DMA1_Channel3_CCR_MEM2MEM (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (14*4))))
你那几个常量的定义值是什么?
PERIPH_BB_BASE = ?
DMA1_BASE = ?
PERIPH_BASE = ?
ST 库里面定义的!
/******************************************************************************/
/* Peripheral memory map */
/******************************************************************************/
/* Peripheral and SRAM base address in the alias region */
#define PERIPH_BB_BASE ((u32)0x42000000)
#define SRAM_BB_BASE ((u32)0x22000000)
/* Peripheral and SRAM base address in the bit-band region */
#define SRAM_BASE ((u32)0x20000000)
#define PERIPH_BASE ((u32)0x40000000)
/* FSMC registers base address */
#define FSMC_R_BASE ((u32)0xA0000000)
/* Peripheral memory map */
#define APB1PERIPH_BASE PERIPH_BASE
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define AHBPERIPH_BASE (PERIPH_BASE + 0x20000)
#define TIM2_BASE (APB1PERIPH_BASE + 0x0000)
#define TIM3_BASE (APB1PERIPH_BASE + 0x0400)
#define TIM4_BASE (APB1PERIPH_BASE + 0x0800)
#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00)
#define TIM6_BASE (APB1PERIPH_BASE + 0x1000)
#define TIM7_BASE (APB1PERIPH_BASE + 0x1400)
#define RTC_BASE (APB1PERIPH_BASE + 0x2800)
#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00)
#define IWDG_BASE (APB1PERIPH_BASE + 0x3000)
#define SPI2_BASE (APB1PERIPH_BASE + 0x3800)
#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00)
#define USART2_BASE (APB1PERIPH_BASE + 0x4400)
#define USART3_BASE (APB1PERIPH_BASE + 0x4800)
#define UART4_BASE (APB1PERIPH_BASE + 0x4C00)
#define UART5_BASE (APB1PERIPH_BASE + 0x5000)
#define I2C1_BASE (APB1PERIPH_BASE + 0x5400)
#define I2C2_BASE (APB1PERIPH_BASE + 0x5800)
#define CAN_BASE (APB1PERIPH_BASE + 0x6400)
#define BKP_BASE (APB1PERIPH_BASE + 0x6C00)
#define PWR_BASE (APB1PERIPH_BASE + 0x7000)
#define DAC_BASE (APB1PERIPH_BASE + 0x7400)
#define AFIO_BASE (APB2PERIPH_BASE + 0x0000)
#define EXTI_BASE (APB2PERIPH_BASE + 0x0400)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
#define GPIOB_BASE (APB2PERIPH_BASE + 0x0C00)
#define GPIOC_BASE (APB2PERIPH_BASE + 0x1000)
#define GPIOD_BASE (APB2PERIPH_BASE + 0x1400)
#define GPIOE_BASE (APB2PERIPH_BASE + 0x1800)
#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)
#define GPIOG_BASE (APB2PERIPH_BASE + 0x2000)
#define ADC1_BASE (APB2PERIPH_BASE + 0x2400)
#define ADC2_BASE (APB2PERIPH_BASE + 0x2800)
#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00)
#define SPI1_BASE (APB2PERIPH_BASE + 0x3000)
#define TIM8_BASE (APB2PERIPH_BASE + 0x3400)
#define USART1_BASE (APB2PERIPH_BASE + 0x3800)
#define ADC3_BASE (APB2PERIPH_BASE + 0x3C00)
#define SDIO_BASE (PERIPH_BASE + 0x18000)
#define DMA1_BASE (AHBPERIPH_BASE + 0x0000)
#define DMA1_Channel1_BASE (AHBPERIPH_BASE + 0x0008)
#define DMA1_Channel2_BASE (AHBPERIPH_BASE + 0x001C)
#define DMA1_Channel3_BASE (AHBPERIPH_BASE + 0x0030)
#define DMA1_Channel4_BASE (AHBPERIPH_BASE + 0x0044)
#define DMA1_Channel5_BASE (AHBPERIPH_BASE + 0x0058)
#define DMA1_Channel6_BASE (AHBPERIPH_BASE + 0x006C)
#define DMA1_Channel7_BASE (AHBPERIPH_BASE + 0x0080)
#define DMA2_BASE (AHBPERIPH_BASE + 0x0400)
#define DMA2_Channel1_BASE (AHBPERIPH_BASE + 0x0408)
#define DMA2_Channel2_BASE (AHBPERIPH_BASE + 0x041C)
#define DMA2_Channel3_BASE (AHBPERIPH_BASE + 0x0430)
#define DMA2_Channel4_BASE (AHBPERIPH_BASE + 0x0444)
#define DMA2_Channel5_BASE (AHBPERIPH_BASE + 0x0458)
#define RCC_BASE (AHBPERIPH_BASE + 0x1000)
#define CRC_BASE (AHBPERIPH_BASE + 0x3000)
/* Flash registers base address */
#define FLASH_R_BASE (AHBPERIPH_BASE + 0x2000)
/* Flash Option Bytes base address */
#define OB_BASE ((u32)0x1FFFF800)
/* FSMC Bankx registers base address */
#define FSMC_Bank1_R_BASE (FSMC_R_BASE + 0x0000)
#define FSMC_Bank1E_R_BASE (FSMC_R_BASE + 0x0104)
#define FSMC_Bank2_R_BASE (FSMC_R_BASE + 0x0060)
#define FSMC_Bank3_R_BASE (FSMC_R_BASE + 0x0080)
#define FSMC_Bank4_R_BASE (FSMC_R_BASE + 0x00A0)
/* Debug MCU registers base address */
#define DBGMCU_BASE ((u32)0xE0042000)
/* System Control Space memory map */
#define SCS_BASE ((u32)0xE000E000)
#define SysTick_BASE (SCS_BASE + 0x0010)
#define NVIC_BASE (SCS_BASE + 0x0100)
#define SCB_BASE (SCS_BASE + 0x0D00)
版主 可以帮下 解答这个问题不?
我没搞明白是怎么回事
楼主这样试一下
#define DMA1_Channel3_CCR_EN (*((vu8 *) (PERIPH_BB_BASE + ((DMA1_BASE-PERIPH_BASE+0x30)*32) + (0*4))))
你把vu8换成vu32试试
我试过,用vu8的确进入了hardfault
因为bit-banding都是以32位字为单位的,用8位的话在有些场合可能会导致总线错误。