Skip to content

Commit

Permalink
Added DicoveryF4
Browse files Browse the repository at this point in the history
Added DicoveryF4
  • Loading branch information
OyinkuroBenafa committed Dec 17, 2021
1 parent 32c12ef commit d70ca48
Show file tree
Hide file tree
Showing 1,946 changed files with 338,123 additions and 456,827 deletions.
189 changes: 189 additions & 0 deletions .gitignore

Large diffs are not rendered by default.

Binary file added Discovery-F4/contents/appendix/BOM.xlsx
Binary file not shown.
Binary file not shown.
Binary file added Discovery-F4/contents/appendix/References.docx
Binary file not shown.
Binary file added Discovery-F4/contents/module1/Introduction.pptx
Binary file not shown.
Binary file not shown.
Binary file not shown.
598 changes: 598 additions & 0 deletions Discovery-F4/contents/module10/Code/SerialDemoI2C/I2CDemo.uvoptx

Large diffs are not rendered by default.

608 changes: 608 additions & 0 deletions Discovery-F4/contents/module10/Code/SerialDemoI2C/I2CDemo.uvprojx

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@

/*
* Auto generated Run-Time-Environment Component Configuration File
* *** Do not modify ! ***
*
* Project: 'Test'
* Target: 'Target 1'
*/

#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H

#define RTE_DEVICE_STARTUP_STM32F4xx /* Device Startup for STM32F4 */

#endif /* RTE_COMPONENTS_H */
44 changes: 44 additions & 0 deletions Discovery-F4/contents/module10/Code/SerialDemoI2C/drivers/adc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#include <platform.h>
#include <adc.h>

void adc_init(void) {

//Enable the clock for ADC module and GPIO Port A
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
RCC->APB2ENR|=RCC_APB2ENR_ADC1EN;

//Configure the Port A pin 1 to be the Analogue Mode
GPIOA->MODER|=GPIO_MODER_MODER1;
GPIOA->PUPDR&=~(GPIO_PUPDR_PUPDR1);

//Set the prescaler for the clock
RCC->CFGR|=RCC_CFGR_PPRE2_DIV2;

//Set ADC prescaler, divided by 2
ADC->CCR|=ADC_CCR_ADCPRE_0;

//Power up the ADC module
ADC1->CR2|=ADC_CR2_ADON;

//480 cycles, better accuracy than 3 cycles
ADC1->SMPR2|=ADC_SMPR2_SMP1;

//Select channel 1 as input
MODIFY_REG(ADC1->SQR3, ADC_SQR3_SQ1, ADC_SQR3_SQ1_0);

}

int adc_read(void) {

//Software trigger the conversion
ADC1->CR2|=ADC_CR2_SWSTART;

//Wait for the completion of the conversion
while(!(ADC1->SR&(1UL<<1))){}

//Return the reading value
return (ADC1->DR)*3;

}

// *******************************ARM University Program Copyright © ARM Ltd 2014*************************************
19 changes: 19 additions & 0 deletions Discovery-F4/contents/module10/Code/SerialDemoI2C/drivers/adc.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*!
* \file adc.h
* \brief Internal analogue to digital converter (ADC) controller.
* \copyright ARM University Program &copy; ARM Ltd 2014.
*/
#ifndef ADC_H
#define ADC_H

/*! \brief Initializes the analogue to digital converter, and configures
* the appropriate GPIO pin.
*/
void adc_init(void);

/*! \brief Reads the current value of the ADC.
* \return Potential of the pin, relative to ground.
*/
int adc_read(void);

#endif // ADC_H
107 changes: 107 additions & 0 deletions Discovery-F4/contents/module10/Code/SerialDemoI2C/drivers/comparator.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
#include <platform.h>
#include <comparator.h>
#include <stdlib.h>

static void (*CMP_callback)(int status);

//Note: the interrupt can be only triggered once!
void comparator_init(void) {
// Initialise and enable the internal comparator, with
// two external inputs.

//Enable the clock for ADC module and GPIO Port A
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
RCC->APB2ENR|=RCC_APB2ENR_ADC2EN;

//Configure the Port A pin 2 to be the Analogue Mode
GPIOA->MODER|=GPIO_MODER_MODER2;
GPIOA->PUPDR&=~(GPIO_PUPDR_PUPDR2);

//Set the prescaler for the clock
RCC->CFGR|=RCC_CFGR_PPRE2_DIV2;

//Set ADC prescaler, divided by 2
ADC->CCR|=ADC_CCR_ADCPRE_0;

//Power up the ADC module, continous mode
ADC2->CR2|=ADC_CR2_ADON | ADC_CR2_CONT;

//480 cycles, better accuracy than 3 cycles
ADC2->SMPR2|=ADC_SMPR2_SMP2;

//Enable analog Watchdog Interrupt
//AWCD watching channel 2
ADC2->CR1=ADC_CR1_AWDSGL|ADC_CR1_AWDEN|ADC_CR1_AWDCH_1;
ADC2->CR1 |= ADC_CR1_AWDIE;

//Set up the threshold
//These threshold values may differe from one board to anothr!
ADC2->LTR=(uint16_t)0x0000;

//HTR should be larger than LTR
ADC2->HTR=(uint16_t)0x0FFF/2;

//Select channel 2 as input
MODIFY_REG(ADC2->SQR3, ADC_SQR3_SQ1, ADC_SQR3_SQ1_1);

ADC2->CR2|=ADC_CR2_SWSTART;

}

void comparator_set_callback(void (*callback)(int state)) {
// Set up and enable the interrupt.

// The callback function should be stored in an internal
// static function pointer.

// When the comparator ISR is fired, the callback function
// should be executed. The state parameter should equal
// comparator_read().

CMP_callback = callback;

//NVIC configuration
__enable_irq();
NVIC_SetPriority(ADC_IRQn,0);
NVIC_ClearPendingIRQ(ADC_IRQn);
NVIC_EnableIRQ(ADC_IRQn);
}

int comparator_read(void) {
// Read the value outputted by the comparator.
// Returns 1 for V+>V- and 0 for V+<V-.
uint32_t count = 0x1FFFF;
while(count--)
{
__NOP();
}

return (ADC2->SR&1);
}

void comparator_set_trigger(ComparatorTriggerMode trig) {
// Set the interrupt trigger type of the comparator to either
// disabled, rising edge, falling edge, or both edges.

ADC2->SR&=~(ADC_SR_AWD);
}

void ADC_IRQHandler(void){

int CMP_IRQ_status = (ADC2->SR&1);

NVIC_ClearPendingIRQ(ADC_IRQn);

if(CMP_callback == NULL){
if((ADC2->SR&1<<0)==1){
ADC2->SR&=~(ADC_SR_AWD);
}
}
else{
if((ADC2->SR&1<<0)==1){
CMP_callback(comparator_read());
ADC2->SR&=~(ADC_SR_AWD);
NVIC_DisableIRQ(ADC_IRQn);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*!
* \file comparator.h
* \brief Exposes functions of an internal comparator.
* \copyright ARM University Program &copy; ARM Ltd 2014.
*/
#ifndef COMPARATOR_H
#define COMPARATOR_H
/*! Defines the triggering mode of the comparator's interrupt. */
typedef enum {
CompNone, //!< Disables the interrupt.
CompRising, //!< Enables an interrupt on the falling edge.
CompFalling, //!< Enables an interrupt on the rising edge.
CompBoth //!< Enables an interrupt on both the rising and falling edges.
} ComparatorTriggerMode;

/*! \brief Initializes the internal comparator. */
void comparator_init(void);

/*! \brief Reads the current value of the comparator.
* \return Output value of the comparator.
*/
int comparator_read(void);

/*! \brief Configures the event which will cause an interrupt.
* \param trig New triggering mode.
*/
void comparator_set_trigger(ComparatorTriggerMode trig);

/*! \brief Pass a callback to the API, which is executed during the
* interrupt handler.
*
* \sa comparator_set_trigger to configure and enable the interrupt.
*
* \param callback Callback function.
*/
void comparator_set_callback(void (*callback)(int state));

#endif // COMPARATOR_H
30 changes: 30 additions & 0 deletions Discovery-F4/contents/module10/Code/SerialDemoI2C/drivers/dac.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
#include <dac.h>
#include <platform.h>

void dac_init(void) {
// Enable the internal DAC targeting an external pin,
// and any clock sources required to start the DAC.

//Enable the clock for DAC module and GPIO Port A
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
RCC->APB1ENR|=RCC_APB1ENR_DACEN;

//Configure the PoRT A pin 5 to be the Analogue
GPIOA->MODER|=GPIO_MODER_MODER5;
GPIOA->PUPDR&=~(GPIO_PUPDR_PUPDR5);

//Enable the DAC
DAC->CR|=DAC_CR_EN2;

//Write to the DAC channel1 12-bit right-aligned data holding register
DAC->DHR12R2=0;
}

void dac_set(int value) {
// Sets the output value of the DAC. This function does
// not need to wait until the DAC output has settled.

DAC->DHR12R2 = value;
}

// *******************************ARM University Program Copyright © ARM Ltd 2014*************************************
21 changes: 21 additions & 0 deletions Discovery-F4/contents/module10/Code/SerialDemoI2C/drivers/dac.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
/*!
* \file dac.h
* \brief Internal digital to analogue converter (DAC) controller.
* \copyright ARM University Program &copy; ARM Ltd 2014.
*/
#ifndef DAC_H
#define DAC_H

/*! \brief Initializes the digital to analogue converter, and configures
* the appropriate GPIO pin.
*/
void dac_init(void);

/*! \brief Sets the DAC to a specified code.
* \param value Code to set the DAC output to.
*/
void dac_set(int value);

#endif

// *******************************ARM University Program Copyright © ARM Ltd 2014*************************************
Loading

0 comments on commit d70ca48

Please sign in to comment.