DMA的数据转运可以从外设到存储器,也可以是从存储器到外设,也可以从存储器转运到存储器,外设和存储器两个站点,都有3个参数,第一个是起始地址,有外设端的起始地址,和存储器端的起始地址,这两个参数决定了数据时从哪里来,到哪里去的,第二个参数是数据宽度,这个参数的作用是,指定一次转运要按多大的数据宽度来进行,可以选择字节Byte、半字节HalfWord和字Word每,字节就是8位转运一个uint8_t,半字节是16位uint16_t,字是32位uint32_t,例如ADC的数据,ADC的数据是uint16_t,所以参数就要选择半字节,依次转运一个uint16_t,第三个参数是地址是否自增,这个参数的作用是,指定一次转运完成后,下一次转运,是不是要把地址移动到下一个位置去,相当于是指针p++,比如ADC扫描模式,用DMA转运数据,外设地址是ADC_DR寄存器,寄存器这边,显然地址是不用自增的,如果自增下一次转运就跑到别的寄存器那里了,存储器这边地址就需要自增,每转运一个数据后,就往后挪个坑,要不然下次再转就把上次的覆盖掉了,这就是地址是否自增的作用,就是指定是否转运一次就挪个坑。 |