SPI를 사용하기 전에 일단 MAX41100을 먼저 알아보도록 하겠습니다.
먼저 MAX41100은 디지털 포텐셔미터 자세한 내용은 데이터시트를 첨부하겠습니다.
제가 사용하는 MAX41100은 100k옴 짜리로 1채널입니다.
데이터시트를 살펴보면 여러가지 사용 방법들이 나오는데 디지털 포텐셔미터를 제어하기 위한 방법으로는 두군데만 보면됩니다. 일단
이부분이 커맨드 및 데이터를 전송해야하는 부분이고
데이터를 이용하여 실제 저항값을 계산해보고자 할때는 아래 수식을 이용하면 됩니다.
측정되는 값과 비교하면 오차율도 확인이 가능할 것으로 예상가능하군요 ^^;;;
그럼 STM32f4의 SPI로 넘어와서 저는 CS핀을 일반GPIO로 진행할 것임으로 (PORTC 4핀으로 지정)
HARDWARE NSS Signal은 Disable로 설정하였습니다. (아직 사용 안해봄 ㅎㅎ)
parameter도 한번 보시고 Prescaler와 CPOL, CPHA 설정 한번씩 봐주시면 좋을 듯 합니다.
SPI를 정확히 분석하고자 하면 오실로스코프를 통해서 파형 분석을 해야겠지요?? ㅎㅎ
(물론 MAX41100은 분석할 것도 사실상 없습니다.. 단방향이라...ㅎㅎ)
일단 가볍게 디지털 포텐셔미터를 사용하는 방법 쪽으로 SPI를 사용할 것임으로 자세한건 패스하도록 하겠습니다.
저는 SPI1번을 그림과 같이 셋팅 후 LL 드라이버를 지정후 Generate Code 해줍니다.
그리고 회로는
MAX41100
1번핀 PC4
2번핀 PA5
3번핀 PA7 (단뱡향이므로 MOSI만 연결하면 됩니다.)
나머지 전원
void setReg_Max41100(int data)
{
SPI_CS_LOW; // CS PIN LOW
LL_SPI_TransmitData8(SPI1,0x11); //SPI COMMAND 1Byte transmit
while(!LL_SPI_IsActiveFlag_TXE(SPI1)); // Wait Flag_TXE
LL_SPI_TransmitData8(SPI1,data); // SPI Data 1Byte transmit
while(!LL_SPI_IsActiveFlag_TXE(SPI1)); // Wait Flag_TXE
SPI_CS_HIGH; // CS PIN HIGH
}
//
int main(void)
{
/*USER CODE BEGIN 1*/
/*USER CODE END 1*/
/*MCU Configuration--------------------------------------------------------*/
/*Reset of all peripherals,Initializes the Flash interface and the Systick.*/
HAL_Init();
/*USER CODE BEGIN Init*/
/*USER CODE END Init*/
/*Configure the system clock*/
SystemClock_Config();
/*USER CODE BEGIN SysInit*/
/*USER CODE END SysInit*/
/*Initialize all configured peripherals*/
MX_GPIO_Init();
MX_SPI1_Init();
/*USER CODE BEGIN 2*/
LL_USART_EnableIT_RXNE(USART1);
LL_SPI_Enable(SPI1); // SPI Enable
setReg_Max41100(50);
while(1)
{
}
}
함수 setReg_Max41100에 동작하는 코드와 Max41100 데이터 전송과정을 같이 보시면 이해가 더욱 쉬울 것으로 예상됩니다
'b. 임베디드 > STM32' 카테고리의 다른 글
[Mikromedia+ for STM32 ARM] UART Polling과 printf (0) | 2020.08.29 |
---|---|
[Mikromedia+ for STM32 ARM] GPIO 테스트 (0) | 2020.08.27 |
[Mikromedia+ for STM32 ARM] 업로드를 위한 2가지 방법 (0) | 2020.08.26 |
[STM32F407VE] w25q16 Flash SPI 동작 (2) | 2020.08.19 |
[STM32F407VGT Discovery] ADC Interrupt 사용하기 (0) | 2019.06.26 |
[STM32F407VGT Discovery] ADC Single Conversion(Polling) 사용하기 (0) | 2019.06.25 |
[STM32F407VGT Discovery] USART printf 사용하기 (0) | 2019.06.24 |
[STM32F407VGT Discovery] USART Interrupt, Polling 사용하기 (0) | 2019.06.23 |