2020-06-11 07:17 AM
Hi !
i'm trying to write a driver, to interface the "ADS1220" device with STM32F103RBT6, using SPI,
i would like to assign each pin of the MCU SPI (PA4, PA5, PA6, PA7) with its corresponding pin of ADS1220 like this : using macros
#define ADS_CS PA4 // or the adress of PA4 of MCU
#define ADS_CLK PA5 // or Address of PA5 of MCU
and so on...
i have received some suggestion about using structure pointer method
i have made a sketch as follow :
#include "stm32f10x.h" // Device header
typedef struct ADS_PIN{
uint32_t CS; // CS PIN of ADS1220 device
uint32_t CLK; // CLK PIN of ADS1220 device
uint32_t DOUT; // DOUT PIN of ADS1220 device
uint32_t DIN; // DIN PIN of ADS1220 device
} ADS_PIN;
ADS_PIN *pointer;
ADS_PIN.CS = GPIOA->BSRR|= (1<<4) // PA4 MCU
ADS_PIN.CLK = GPIOA->BSRR| = (1<<5) // PA5 MCU
ADS_PIN.DIN = GPIOA->BSRR| = (1<<6) // PA6 MCU
ADS_PIN.DOUT = GPIOA->BSRR| = (1<<7) // PA7 MCU
but, i'm confused, it may be sound silly , but i'm trying to understand how to specify that CS / CLK / DIN and DOUT pins correspond to PA / PA5 etc...;
if you could give me a suggestion
Thank you !
2020-06-11 12:47 PM
You don't need this kind of macros. The SPI peripheral manage itself all the SPI pins. The user must not interfere with these pins (except possibly with CS).
1) Physically connect the pins of the ADS to the SPI pins of the MCU,
2) Remap the SPI GPIO (PA4, PA5, ...) to SPI: If you use bare metal register programming set AFIO->MAPR to the proper value.
3) Configure and use the SPI to communicate with the ADS.
Your driver should write to the ADS or read from the ADS through the SPI peripheral, not the GPIO.
Please read the F1 reference manual.
2020-06-12 05:00 AM
Thank you for your response,
i have just configured CS pin as GPIO, the other (SPI) pins as alternate function, of course i have read the datasheet CD00171190 ,
Best regards,