首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPI模式下的微芯片起动机工具包

SPI模式下的微芯片起动机工具包
EN

Stack Overflow用户
提问于 2017-03-07 09:21:53
回答 2查看 478关注 0票数 3

我想使用微控制器通过SPI进行数据通信。因此,我首先选择了具有PIC32MX470F512L的微芯片USB III模块。我尝试了几种方法来编码它的SPI,但是只有时钟信号SCK可以在示波器上看到。

然后,我尝试了相同的代码(刚刚调整了一些代码行,以新的PIC)与微芯片初学者工具包I,其中有一个PIC32MX360F512L。都跑得很完美。所以,我不明白为什么USB III不适用于SPI通信?

我给出了用于测试SDO & /SS的代码。

代码语言:javascript
复制
#define _SUPPRESS_PLIB_WARNING

#include <stdio.h>
#include <stdlib.h>
#include <plib.h>
#include <p32xxxx.h>
#include <xc.h>
#include <peripheral/spi.h>

// DEVCFG2
#pragma config FPLLIDIV = DIV_2        // PLL Input Divider (12x Divider)
#pragma config FPLLMUL = MUL_20         // PLL Multiplier (24x Multiplier)
#pragma config FPLLODIV = DIV_1       // System PLL Output Clock Divider (PLL Divide by 256)

// DEVCFG1
#pragma config FNOSC = PRIPLL           // Oscillator Selection Bits (Primary Osc w/PLL (XT+,HS+,EC+PLL))
#pragma config FSOSCEN = OFF            // Secondary Oscillator Enable (Disabled)
#pragma config IESO = ON                // Internal/External Switch Over (Enabled)
#pragma config POSCMOD = HS             // Primary Oscillator Configuration (HS osc mode)
#pragma config OSCIOFNC = OFF           // CLKO Output Signal Active on the OSCO Pin (Disabled)
#pragma config FPBDIV = DIV_1           // Peripheral Clock Divisor (Pb_Clk is Sys_Clk/8)
#pragma config FCKSM = CSDCMD           // Clock Switching and Monitor Selection (Clock Switch Disable, FSCM Disabled)
#pragma config WDTPS = PS1048576        // Watchdog Timer Postscaler (1:1048576)
#pragma config FWDTEN = OFF             // Watchdog Timer Enable (WDT Disabled (SWDTEN Bit Controls))

// DEVCFG0
#pragma config DEBUG = OFF               // Background Debugger Enable (Debugger is Enabled)
#pragma config ICESEL = ICS_PGx2        // ICE/ICD Comm Channel Select (Communicate on PGEC1/PGED1)
#pragma config PWP = OFF                // Program Flash Write Protect (Disable)
#pragma config BWP = OFF                // Boot Flash Write Protect bit (Protection Disabled)
#pragma config CP = OFF                 // Code Protect (Protection Disabled)


int main(void) {
  TRISGbits.TRISG6=0; //SCK2
  TRISGbits.TRISG7=1; //SDI2
  TRISGbits.TRISG8=0; //SDO2
  TRISGbits.TRISG9=0; //SS2
  OpenSPI2(SPI_MODE16_ON|SPI_SMP_ON|MASTER_ENABLE_ON|SEC_PRESCAL_5_1|PRI_PRESCAL_16_1, SPI_ENABLE);
  int data;
  PORTGbits.RG9 = 1;

  while(1)
  {
      PORTGbits.RG9 = 0;
      putcSPI2(0xaaaa);
      data=getcSPI2();
      PORTGbits.RG9 = 1;
  }
  return 0;
}

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-15 05:52:42

Pin映射

你做引脚映射吗?它不会出现在您发布的代码中。

您需要使用PPS (外围引脚选择)将该引脚分配到SPI模块。

OpenSPI是一个库函数,但它也需要使用PPS进行引脚映射。

12.3.1点http://ww1.microchip.com/downloads/en/DeviceDoc/60001120F.pdf

管脚状态(模拟/数字)

检查您的引脚是否处于(默认)模拟状态。如果引脚也有一个模拟( an )函数,默认状态将是模拟的,您无法控制该引脚。您需要设置寄存器ANSELx (或AD1PCFG)来设置引脚。

在芯片PIC32MX470F512L中,您使用的引脚(RG6-9)也具有模拟功能(AN):

代码语言:javascript
复制
10 AN16/C1IND/RPG6/SCK2/PMA5/RG6
11 AN17/C1INC/RPG7/PMA4/RG7 
12 AN18/C2IND/RPG8/PMA3/RG8 
14 AN19/C2INC/RPG9/PMA2/RG9 

第7页http://ww1.microchip.com/downloads/en/DeviceDoc/60001185F.pdf

模拟引脚部分12.2.5 http://ww1.microchip.com/downloads/en/DeviceDoc/60001120F.pdf

票数 0
EN

Stack Overflow用户

发布于 2017-03-15 08:33:31

大家好,谢谢你们的回复!

多亏了你的帮助,我发现了这个问题。针形是必要的。下面是我为引脚配置添加的代码。

代码语言:javascript
复制
  // Mapping SPI1 & SPI2
  SDI1Rbits.SDI1R = 0xa; // SDI1 to C4
  RPD0Rbits.RPD0R = 0x8; // SDO1 to D0
  RPB2Rbits.RPB2R = 0x7; // SS1 to B2
  SDI2Rbits.SDI2R = 0x1; // SDI2 to G7
  RPG8Rbits.RPG8R = 0x6; // SDO2 to G8
  RPG9Rbits.RPG9R = 0x6; // SS2 to G9
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42644395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档