precision-converters-firmware
app_config_stm32.h
Go to the documentation of this file.
1 /***************************************************************************/
13 #ifndef APP_CONFIG_STM32_H_
14 #define APP_CONFIG_STM32_H_
15 
16 /******************************************************************************/
17 /***************************** Include Files **********************************/
18 /******************************************************************************/
19 #include <stdint.h>
20 
21 #include "stm32_hal.h"
22 #include "stm32_i2c.h"
23 #include "stm32_irq.h"
24 #include "stm32_gpio_irq.h"
25 #include "stm32_spi.h"
26 #include "stm32_gpio.h"
27 #include "stm32_uart.h"
28 #include "stm32_pwm.h"
29 #include "stm32_dma.h"
30 
31 /******************************************************************************/
32 /********************** Macros and Constants Definition ***********************/
33 /******************************************************************************/
34 /* Note: The SDP-K1 board with the STM32F469NI MCU has been used
35 * for developing the firmware. The below parameters will change depending
36 * on the controller used. */
37 #define TARGET_NAME SDP_K1
38 
39 /* Pin mapping for AD4052 w.r.t Arduino Headers */
40 #define I2C_DEV_ID 1 // I2C1
41 #define UART_MODULE 5 // UART5
42 #define UART_IRQ UART5_IRQn
43 #define SPI_DEVICE_ID 1 // SPI1
44 #define SPI_CS_PIN_NUM 15 // PA_15
45 #define SPI_CS_PORT_BASE GPIOA
46 #define SPI_CS_PORT_NUM 0 // PORTA = 0
47 #define CNV_PIN_NUM 15 // PB_15
48 #define CNV_PORT_NUM 1 // PORTB = 1
49 #define CNV_PORT_BASE GPIOB
50 #define GP0_PIN_NUM 7 // PG_7
51 #define GP0_PORT_NUM 6 // PORTG = 6
52 #define GP1_PIN_NUM 10 // PG_10
53 #define GP1_PORT_NUM 6 // PORTG = 6
54 #define BSY_PIN_NUM GP0_PIN_NUM
55 #define BSY_PORT_NUM GP0_PORT_NUM
56 #define RESET_PIN_NUM 9 // PG_9
57 #define RESET_PORT_NUM 6 // PORTG = 6
58 #define TRIGGER_INT_ID GP0_PIN_NUM
59 #define TRIGGER_GPIO_PORT 0 // Unused macro
60 #define TRIGGER_GPIO_PIN GP0_PIN_NUM
61 #define MAX_SPI_SCLK 22500000
62 
63 #define gpio_ops stm32_gpio_ops
64 #define spi_ops stm32_spi_ops
65 #define i2c_ops stm32_i2c_ops
66 #define uart_ops stm32_uart_ops
67 #define pwm_ops stm32_pwm_ops
68 #define trigger_gpio_irq_ops stm32_gpio_irq_ops
69 #define dma_ops stm32_dma_ops
70 #define trigger_gpio_handle 0 // Unused macro
71 
72 /* Timer specific macros used for calculating pwm
73  * period and duty cycle */
74 #define TIMER_1_PRESCALER 1
75 #define TIMER_2_PRESCALER 0
76 #define TIMER_1_CLK_DIVIDER 2
77 #define TIMER_2_CLK_DIVIDER 2
78 #define TIMER_8_PRESCALER 0
79 #define TIMER_8_CLK_DIVIDER 2
80 
81 /* Timer Channels */
82 #define TIMER_CHANNEL_1 1
83 #define TIMER_CHANNEL_2 2
84 #define TIMER_CHANNEL_3 3
85 
86 #define TIMER1_ID 1
87 #define TIMER2_ID 2
88 #define TIMER8_ID 8
89 
90 #define Rx_DMA_IRQ_ID DMA2_Stream0_IRQn
91 #define AD469x_TxDMA_CHANNEL_NUM DMA_CHANNEL_7
92 #define AD469x_RxDMA_CHANNEL_NUM DMA_CHANNEL_3
93 
94 /* Define the max possible sampling (or output data) rate for a given platform.
95  * This is also used to find the time period to trigger a periodic conversion event.
96  * Note: Max possible ODR is 500KSPS per channel for burst/continuous data capture on
97  * IIO client. This is derived by testing the firmware on STM32F469NI MCU @22Mhz SPI clock.
98  * The max possible ODR can vary from board to board and data continuity is not guaranteed
99  * above this ODR on IIO oscilloscope
100  */
101 #if (INTERFACE_MODE == SPI_INTERRUPT)
102 #define SAMPLING_RATE (62500)
103 #define CONV_TRIGGER_DUTY_CYCLE_NSEC(x) (x / 10)
104 #else
105 #define SAMPLING_RATE (500000)
106 #define CHIP_SELECT_DUTY_CYCLE_NS 300
107 #endif
108 #define CONV_TRIGGER_PERIOD_NSEC(x) (((float)(1.0 / x) * 1000000) * 1000)
109 
110 #define AD469x_DMA_NUM_CHANNELS 2
111 
112 /* PWM configuration for 22.5MHz SPI clock */
113 #define TX_TRIGGER_PERIOD 406
114 #define TX_TRIGGER_DUTY_RATIO 50
115 
116 #define CNV_DUTY_RATIO_NS 1310
117 
118 /******************************************************************************/
119 /********************** Public/Extern Declarations ****************************/
120 /******************************************************************************/
121 extern I2C_HandleTypeDef hi2c1;
122 extern SPI_HandleTypeDef hspi1;
123 extern DMA_HandleTypeDef hdma_spi1_rx;
124 extern TIM_HandleTypeDef htim1;
125 extern TIM_HandleTypeDef htim2;
126 extern DMA_HandleTypeDef hdma_tim1_ch3;
127 extern DMA_HandleTypeDef hdma_tim1_ch2;
128 extern TIM_HandleTypeDef htim12;
129 extern UART_HandleTypeDef huart5;
130 extern volatile bool data_ready;
131 
132 extern struct stm32_uart_init_param stm32_uart_extra_init_params;
133 extern struct stm32_spi_init_param stm32_spi_extra_init_params;
134 extern struct stm32_gpio_init_param stm32_gpio_cnv_extra_init_params;
135 extern struct stm32_gpio_init_param stm32_gpio_gp0_extra_init_params;
136 extern struct stm32_gpio_init_param stm32_gpio_gp1_extra_init_params;
137 extern struct stm32_gpio_init_param stm32_gpio_reset_extra_init_params;
138 extern struct stm32_gpio_irq_init_param stm32_gpio_irq_extra_init_params;
139 extern struct stm32_gpio_init_param stm32_pwm_gpio_extra_init_params;
140 extern struct stm32_pwm_init_param stm32_pwm_cnv_extra_init_params;
141 #if (INTERFACE_MODE == SPI_DMA)
142 extern struct stm32_pwm_init_param stm32_cs_extra_init_params;
143 extern struct stm32_pwm_init_param stm32_tx_trigger_extra_init_params;
144 extern DMA_HandleTypeDef hdma_tim8_ch1;
145 extern struct stm32_dma_channel rxdma_channel;
146 extern struct stm32_dma_channel txdma_channel;
147 extern struct stm32_gpio_init_param stm32_cs_pwm_gpio_extra_init_params;
148 
149 void receivecomplete_callback(DMA_HandleTypeDef* hdma);
150 void stm32_cnv_output_gpio_config(bool is_gpio);
151 void stm32_cs_output_gpio_config(bool is_gpio);
152 void stm32_abort_dma_transfer(void);
153 void stm32_timer_enable(void);
154 void stm32_timer_stop(void);
155 void tim8_config(void);
156 void tim1_config(void);
157 #endif
158 
159 void stm32_system_init(void);
160 
161 #endif /* APP_CONFIG_STM32_H_ */
UART_HandleTypeDef huart5
SPI_HandleTypeDef hspi1
struct stm32_dma_channel txdma_channel
Definition: app_config_stm32.c:29
DMA_HandleTypeDef hdma_tim1_ch2
void tim1_config(void)
Configure CNV timer.
Definition: app_config_stm32.c:402
TIM_HandleTypeDef htim1
TIM_HandleTypeDef htim2
DMA_HandleTypeDef hdma_tim8_ch1
volatile bool data_ready
Definition: ad405x_iio.c:168
struct stm32_dma_channel rxdma_channel
Definition: app_config_stm32.c:39
void stm32_cs_output_gpio_config(bool is_gpio)
Configures the chip select pin as output mode.
Definition: app_config_stm32.c:344
void stm32_system_init(void)
Initialize the STM32 system peripherals.
Definition: app_config_stm32.c:111
void tim8_config(void)
Configure Tx Trigger timer.
Definition: app_config_stm32.c:412
struct stm32_pwm_init_param stm32_cs_extra_init_params
Definition: app_config_stm32.c:125
void stm32_timer_enable(void)
Starts the timer signal generation for PWM and OC channels all at once.
Definition: app_config_stm32.c:267
struct stm32_gpio_init_param stm32_gpio_cnv_extra_init_params
Definition: app_config_stm32.c:60
void receivecomplete_callback(DMA_HandleTypeDef *hdma)
Callback function to flag the capture of number of requested samples.
Definition: app_config_stm32.c:306
struct stm32_pwm_init_param stm32_pwm_cnv_extra_init_params
Definition: app_config_stm32.c:112
DMA_HandleTypeDef hdma_tim1_ch3
struct stm32_pwm_init_param stm32_tx_trigger_extra_init_params
Definition: app_config_stm32.c:135
void stm32_cnv_output_gpio_config(bool is_gpio)
Configures the conversion pin as output mode.
Definition: app_config_stm32.c:363
int stm32_abort_dma_transfer(void)
Abort ongoing SPI RX DMA transfer.
Definition: app_config_stm32.c:380
struct stm32_gpio_init_param stm32_pwm_gpio_extra_init_params
Definition: app_config_stm32.c:102
struct stm32_uart_init_param stm32_uart_extra_init_params
Definition: app_config_stm32.c:49
struct stm32_gpio_irq_init_param stm32_gpio_irq_extra_init_params
Definition: app_config_stm32.c:78
DMA_HandleTypeDef hdma_spi1_rx
void stm32_timer_stop(void)
Stops generating timer signals.
Definition: app_config_stm32.c:285
struct stm32_spi_init_param stm32_spi_extra_init_params
Definition: app_config_stm32.c:54
struct stm32_gpio_init_param stm32_cs_pwm_gpio_extra_init_params
Definition: app_config_stm32.c:89
I2C_HandleTypeDef hi2c1
struct stm32_gpio_init_param stm32_gpio_gp0_extra_init_params
Definition: app_config_stm32.c:66
struct stm32_gpio_init_param stm32_gpio_gp1_extra_init_params
Definition: app_config_stm32.c:72
TIM_HandleTypeDef htim12
struct stm32_gpio_init_param stm32_gpio_reset_extra_init_params
Definition: app_config_stm32.c:81