SPI로 데이터를 통신하기 위해 마이크로 컨트롤러를 사용하고 싶습니다. 그래서, 우선 PIC32MX470F512L을 가진 마이크로 칩 USB 스타터 키트 III 모듈을 선택했습니다. 필자는 SPI를 코딩하는 몇 가지 방법을 시도했지만 오실로스코프에서는 SCK 만 볼 수 있습니다.SPI 모드를 사용하는 마이크로 칩 스타터 키트
그런 다음 PIC32MX360F512L이있는 마이크로 칩 스타터 키트 I에서 동일한 코드 (새로운 PIC로 약간의 코드 라인을 조정)를 시도했습니다. 그리고 모두 완벽하게 실행됩니다. 그래서 SPI 통신을 위해 USB 스타터 키트 III가 작동하지 않는 이유를 모르겠습니다.
SPI SDO &/SS를 테스트하는 데 사용되는 코드를 제공합니다.
#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;
}
감사
PIC32MX470F512L의 핀 구성 (alt 기능 등)은 확실합니까? 아마 prescalers는 360에서 잘 작동하는 동안 470에 다른 구성을 가지고 있습니다. – LPs
@LPs : 두 PIC에서 기본 핀 구성을 사용합니다. 귀하의 회신을 확인했는데 오류가 없습니다. 이것은 PIC32MX470F512L의 SPI1에 대한 구성 비트입니다. {TRISDbits.TRISD10 = 0; // SCK1 TRISCbits.TRISC4 = 1; // SDI1 TRISDbits.TRISD0 = 0; // SDO1 TRISBbits.TRISB2 = 0; // SS1} PIC32MX470F512L의 데이터 시트에서 SPI 채널의 프리스케일러 및 구성과 관련하여 그림은 25Mbps SPI까지 지원할 수 있음을 나타냅니다. – Dey
다시 확인하고 "기본 구성"에 의존하지 않고 핀을 구성하려고했습니다. 이제 SPI는 PIC32MX470F512L에서도 잘 작동합니다! 나는 "PPS"를 언급하는 테이블에서, 나는 단지 내 구성 핀을 사용자 정의하고 싶다고 생각했다. 그러나 그것은 필수적이었다. – Dey