打印
[活动专区]

【AT-START-403A 测评】SPI从机 IOMUX/AFIO测试

[复制链接]
1373|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在实际开发中有可能用到AT32的SPI从机模式,初步进行一下测试。
硬件环境:使用一颗STM32作为主机,使用AT32F403AVGT7开发板作为从机 使用其spi4作为从机接收。同时不使用默认的spi4对应io,而是使用重映射功能.

关键初始化代码如下
void RCC_Configuration(void)
{
/* Enable peripheral clocks --------------------------------------------------*/

  /* Enable SPIy clock and GPIO clock for SPIy and SPIz */
RCC_APB1PeriphClockCmd(RCC_APB1PERIPH_SPI4, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2PERIPH_GPIOA | RCC_APB2PERIPH_GPIOB | RCC_APB2PERIPH_GPIOC | RCC_APB2PERIPH_AFIO |RCC_APB2PERIPH_GPIOD, ENABLE);
  /* Enable SPIz Periph clock */

}


void SPI4_initial()
{
        GPIO_InitType GPIO_InitStructure;
        SPI_InitType   SPI_InitStructure;
  NVIC_InitType NVIC_InitStructure;

        GPIO_PinsRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);
GPIO_StructInit(&GPIO_InitStructure);
  GPIO_InitStructure.GPIO_Pins = GPIO_Pins_0;                         
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT_PP;       
  GPIO_Init(GPIOA, &GPIO_InitStructure);


  NVIC_InitStructure.NVIC_IRQChannel = SPI4_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
GPIO_InitStructure.GPIO_Pins = MOSI_4 | SCK_4;
  GPIO_InitStructure.GPIO_MaxSpeed = GPIO_MaxSpeed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  GPIO_InitStructure.GPIO_Pins = SPI_RF_CS;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

// GPIO_SetBits(GPIOB,SPI_RF_CS);

  /* Configure SPI4 pins: MISO  ---------------------------------*/
  GPIO_InitStructure.GPIO_Pins = MISO_4;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
AFIO->MAP5 = 0x20000000;

  /* SPI4 Config -------------------------------------------------------------*/
  SPI_DefaultInitParaConfig(&SPI_InitStructure);
  SPI_InitStructure.SPI_TransMode = SPI_TRANSMODE_FULLDUPLEX;
  SPI_InitStructure.SPI_Mode = SPI_MODE_SLAVE;
  SPI_InitStructure.SPI_FrameSize = SPI_FRAMESIZE_8BIT;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_LOW;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1EDGE;
  SPI_InitStructure.SPI_NSSSEL = SPI_NSSSEL_SOFT;

  SPI_InitStructure.SPI_FirstBit = SPI_FIRSTBIT_MSB;
  SPI_InitStructure.SPI_CPOLY = 7;
  SPI_Init(SPI4, &SPI_InitStructure);

SPI4->CTRL1 |= (uint16_t)0x0040;
}

void testspi(){
    uint8_t RxIdx = 0;
    while (RxIdx < 20)
    {
        while (SPI_I2S_GetFlagStatus(SPI4, SPI_I2S_FLAG_RNE) == RESET);      
        spi_rev_temp[RxIdx++] = SPI_I2S_RxData(SPI4);        
    }



}


Talk is cheap  show me the code。
在附件中
实验现象就是buf里可以收到主机发送的内容。
个人经验在于两点:
       1.手册里的iomux模块在代码里其实就是afio部分,如果你想使用重映射功能,别忘记开启他的时钟。
       2.使用spi4 时候 我使用的v1.3的库文件,enable函数出现一些问题,所以直接操纵寄存器就好。


AT32V13STD.rar

933.35 KB

使用特权

评论回复
沙发
pmp| | 2023-3-2 10:15 | 只看该作者
很少用到spi从机了吧。              

使用特权

评论回复
板凳
beacherblack| | 2023-3-2 10:34 | 只看该作者
AT32F403A单片机SPI口怎么对应?

使用特权

评论回复
地板
houjiakai| | 2023-3-2 10:45 | 只看该作者
可以通过SPI实现一主多从的多机连接方式么

使用特权

评论回复
5
loutin| | 2023-3-2 11:09 | 只看该作者
spi主机不连从机数据能发出去吗  

使用特权

评论回复
6
macpherson| | 2023-3-2 11:28 | 只看该作者
spi的通信速度是多少?              

使用特权

评论回复
7
mmbs| | 2023-3-2 11:33 | 只看该作者
SPI从机接收数据错误是怎么回事

使用特权

评论回复
8
louliana| | 2023-3-2 11:39 | 只看该作者
spi从机模式 要设置传输速度吗

使用特权

评论回复
9
phoenixwhite| | 2023-3-2 11:58 | 只看该作者
这个从机最多支持多少个?              

使用特权

评论回复
10
cemaj| | 2023-3-3 20:49 | 只看该作者
403A 如何实现多台SPI通信

使用特权

评论回复
11
pentruman| | 2023-3-3 20:55 | 只看该作者
SPI从机接收数据错误是怎么回事

使用特权

评论回复
12
updownq| | 2023-3-3 22:18 | 只看该作者
为什么不使用串口通信呢
              

使用特权

评论回复
13
pixhw| | 2023-3-3 22:24 | 只看该作者
AT32F403A是否有QSPI接口?

使用特权

评论回复
14
中国龙芯CDX| | 2023-3-7 16:57 | 只看该作者
主从机怎么设置

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝