[STM32F0] stm32f030c8t6 spi上使用DMA

[复制链接]
4004|4
 楼主| z32437089 发表于 2015-11-28 13:41 | 显示全部楼层 |阅读模式
本帖最后由 z32437089 于 2015-11-28 13:44 编辑

久久未能解决
  1. <div class="blockcode"><blockquote>char Buffer[5]={0x55,0xff,0xee,0x44,0x33};
  2. DMA_InitTypeDef  DMA_InitStructure;

  3. void dmainit()
  4. {

  5.           /* DMA1 channel1 configuration ---------------------------------------------*/
  6.           /* Enable DMA1 clock --------------------------------------------------------*/

  7.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

  8.           DMA_DeInit(DMA1_Channel1);
  9.           DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)SPI1->DR;    //spi1 dr
  10.           DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)Buffer;
  11.           DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;   //m to spi
  12.           DMA_InitStructure.DMA_BufferSize = 5;//sizeof();
  13.           DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  14.           DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  15.           DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  16.           DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  17.           DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;//DMA_Mode_Normal;
  18.           DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  19.           DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
  20.           DMA_Init(DMA1_Channel1, &DMA_InitStructure);

  21.           /* Enable DMA1 Channel1 transfer */
  22.           DMA_Cmd(DMA1_Channel1, ENABLE);

  23. }
  24. void spiinit()
  25. {
  26.         GPIO_InitTypeDef GPIO_InitStructure;
  27.         SPI_InitTypeDef SPI_InitStructure;

  28.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);
  29.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

  30.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 ;
  31.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  32.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
  33.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  34.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  35.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  36.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);
  37.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);
  38.         GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);

  39.         SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  40.         SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  41.         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  42.         SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  43.         SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  44.         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  45.         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
  46.         SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

  47.         SPI_Init(SPI1, &SPI_InitStructure);

  48.         SPI_Cmd(SPI1, ENABLE);
  49.         SPI_I2S_DMACmd(SPI1, SPI_I2S_DMAReq_Tx, ENABLE);

  50.         }
  51. int main()
  52. {
  53.         SystemInit();
  54.         dmainit();
  55.         spiinit();
  56.         while(1);
  57. }

各初始化代码如上图所示,查阅好几个例程,改无可改。现在的情况是没有监测到任何数据从MOSI发出。如果手动SPI发送数据是可以的发送的,只能说明SPI能工作,DMA无法工作,求指导。
 楼主| z32437089 发表于 2015-11-28 14:48 | 显示全部楼层
结贴
加个&()就好了
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(SPI1->DR);    //spi1 dr
gmm2015 发表于 2015-11-28 15:24 | 显示全部楼层
#define SPI1_DR_ADDRESS      0x4001300C

DMA_InitStructure.DMA_PeripheralBaseAddr = ((uint32)SPI1_DR_ADDRESS);
mmuuss586 发表于 2015-11-28 17:14 | 显示全部楼层

解决了就好;
UBC-Jason 发表于 2016-1-13 16:16 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:常州诚聚光电科技有限公司,设备灯具定制,亮化工程配套,调试,灯具,简易控制器,DMX512控制系统,立志做

8

主题

210

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部