...
The SPI communication will need to be further configured. To configure it go to the .ioc file, find SPI1 in the Connectivity menu on the left:
...
The data size is the length of each message in bits, to make communication easier, set this to 8 bits.In the ADC datasheet there is information on controlling the ADC from the microcontroller in Sections Then, configure the parameters:
Data Size
First Bit
Clock Polarity
Clock Phase
To do so, do the following:
Understand what each parameter does/means
Look in the ADC datasheet under sections 5.0 and 6.1
...
Specifically check the following configuration parameters:
Clock polarity
If the ADC sends Most or Least significant bit first (MSB/LSB)
...
to learn how the ADC communicates
Draw conclusions and set appropriate values
Also, it is good to note that the MCU can run much faster than the ADC , so adding a prescaler and outpace it. Add a Prescaler of 16 or greater in the configuration of SPI1 will reduce the speed it needs to operate atto keep the baud rate reasonable for the ADC.
The Hal library automatically generates the base code required to run the configuration you set when you save the .ioc file. You do want the IDE to generate code for you.
...
Don’t forget that the ADC requires specific behavior for the CS line that is connected to the GPIO pin you set. Information for controlling a GPIO pin can be found in the HAL Function APIs (GPIO starts from p196).
Converting ADC value to PWM signal
...
Only 10 of the bits read from the ADC contain useful data (LSB/MSB determines which bits), the rest will need to be ignored.
The ADC digital value will range from the maximum to minimum value 10 bits can hold.
(What is the largest number that 10 bits can hold?)
The timer will need to be started only once in the program.
Remember that the duty cycle must range from 5-10% of the total period or 1-2ms of on time and the ADC value will need to be converted to counts.
Additional Resource:
Best Practices
For the Firmware team we follow a naming and code style guide to make our code more uniform and readable
...
Look at the HAL_TIM_ and __HAL_TIM_ functions to access the timer. The
HAL User ManualHAL Function APIs will be particularly useful here.For SPI communication look at the SPI IO operation function in the
HAL User ManualHAL Function APIs.The electrical schematic is useful for determining which pins should be configured to which peripheral.
Don’t be shy to learn from Google or shoot your question in discord if any of the resource provided in this bootcamp document are not helping you.