Téléverser les fichiers vers "CantoOrvikPilotes"

This commit is contained in:
Oskar Orvik 2025-11-12 15:08:36 +01:00
parent 0ab684fc00
commit a79ec6a59c
5 changed files with 246 additions and 0 deletions

BIN
CantoOrvikPilotes/ADC.c Normal file

Binary file not shown.

View file

@ -0,0 +1,80 @@
#include "stm32f10x.h"
#define In_Floating 0x4
#define In_PullDown 0x8
#define In_PullUp 0x8
#define In_Analog 0x0
#define Out_Ppull 0x3
#define Out_OD 0x7
#define AltOut_Ppull 0xB
#define AltOut_OD 0xF
void MyGPIO_Init(GPIO_TypeDef * GPIO, char pin, char conf ){
int shift_pin;
//Start clock
if(GPIO == GPIOA){
RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN;
}
else if(GPIO == GPIOB){
RCC -> APB2ENR |= RCC_APB2ENR_IOPBEN;
}
else if(GPIO == GPIOC){
RCC -> APB2ENR |= RCC_APB2ENR_IOPCEN;
}
else if(GPIO == GPIOD){
RCC -> APB2ENR |= RCC_APB2ENR_IOPDEN;
}
if(pin < 8){//CRL zone
shift_pin = pin*4;
GPIO -> CRL &= ~(0xF << shift_pin);
//PullUp and PullDown have the same conf number, so we need to change the ODR to diferenciate them both
if(conf == In_PullUp){
GPIO -> CRL |= ( In_PullUp << shift_pin);
GPIO -> ODR |= (1<<pin);
}
else if(conf == In_PullDown){
GPIO -> CRL |= ( In_PullDown << shift_pin);
GPIO -> ODR &= ~(1<<pin);
}
else{
GPIO -> CRL |= ( conf << shift_pin);
}
}
else{//CRH zone
shift_pin = (pin-8)*4;
GPIO -> CRH &= ~(0xF << shift_pin);
if(conf == In_PullUp){
GPIO -> CRH |= ( In_PullUp << shift_pin);
GPIO -> ODR |= (1<<pin);
}
else if(conf == In_PullDown){
GPIO -> CRH |= ( In_PullDown << shift_pin);
GPIO -> ODR &= ~(1<<pin);
}
else{
GPIO -> CRH |= ( conf << shift_pin);
}
}
}
int MyGPIO_Read(GPIO_TypeDef * GPIO, char GPIO_Pin){
if(GPIO -> IDR & (1 << GPIO_Pin)){
return 1;
}
else{
return 0;
}
}
void MyGPIO_Set(GPIO_TypeDef * GPIO, char GPIO_Pin){
GPIO -> BSRR = (1<<GPIO_Pin);//1 on set zone
}
void MyGPIO_Reset(GPIO_TypeDef * GPIO, char GPIO_Pin){
GPIO -> BSRR = (1<<(GPIO_Pin+16));//1 on reset zone
}
void MyGPIO_Toggle(GPIO_TypeDef * GPIO, char GPIO_Pin){
if((GPIO-> ODR & (1<<GPIO_Pin)) != 0){
GPIO -> BSRR = (1<<(GPIO_Pin+16));
}
else{
GPIO -> BSRR = (1<<GPIO_Pin);
}
}

106
CantoOrvikPilotes/GPIO.c Normal file
View file

@ -0,0 +1,106 @@
#include "stm32f10x.h"
#include <stdlib.h>
#include "../Include/GPIO.h"
int ChercherEtat(GPIO_TypeDef * GPIO, int pin){ // Trouvons la valeur d'un broche sur un certain GPIO
return((GPIO -> IDR & (0x01 << pin)));
}
void ResetBroche(uint32_t GPIO, int Broche){ // Mettre à zero d'un certain broche d'un certain GPIO
GPIO -> BSRR |= BS Broche;
}
void SetBroche(uint32_t GPIO, int Broche){ // Mettre à zero d'un certain broche d'un certain GPIO
GPIO -> BSRR |= BSBroche << 16;
}
void TogglePin(GPIO_TypeDef*GPIO, int Broche){ // Inverser la valueur de broche sur GPIO
GPIO -> ODR = GPIO -> ODR ^ (0x1 << Broche);
}
void ConfigureGPIO(uint32_t GPIO, int Broche, int IO, char * Mode){ // Mettre un broche d'un GPIO sur un mode
// Possble de améliorer avec des int à la place de string
//Start clock pour les GPIO concernés
if(GPIO == GPIOA){
RCC -> APB2ENR |= RCC_APB2ENR_IOPAEN;
}
else if(GPIO == GPIOB){
RCC -> APB2ENR |= RCC_APB2ENR_IOPBEN;
}
else if(GPIO == GPIOC){
RCC -> APB2ENR |= RCC_APB2ENR_IOPCEN;
}
else if(GPIO == GPIOD){
RCC -> APB2ENR |= RCC_APB2ENR_IOPDEN;
}
// Cas d'u CRL, broche 0 à 7
if (Broche < 8) {
GPIO -> CRL &= ~(0x1 << Broche *4) & ~(0x1 << Broche *4 +1) & ~(0x1 << Broche *4 + 2) & ~(0x1 << Broche *4 + 3); // Clean bits
if (IO == 0){ //Input
if (strcmp(Mode,"Floating")) {
GPIO -> CRL |= (0x1 << Broche *4) | (0x1 << Broche * 4 + 1);
}
else if (strcmp(Mode,"Pull-Up") || strcmp(Mode,"Pull-Down")){
GPIO -> CRL |= (0x1 << 6*4 + 1);
}
else {
return; // Mode invalid
}
}
else if ( IO < 5) { // Output
GPIO -> CRL |= (0xIO << Broche * 4 + 2); // Frequency mode
if (strcmp(Mode, "Open-Drain")){
GPIO -> CRL |= (0x1 << Broche *4);
}
else if (strcmp(Mode, "Push-Pull Alterne")){
GPIO -> CRL |= (0x1 << Broche *4 + 1);
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; // Alternate Function I/O clock enable GPIOA
}
else if (strcmp(Mode, "Open-Drain Alterne")){
GPIO -> CRL |= (0x1 << Broche * 4) | (0x1 << Broche * 4 + 1);
}
else {
return; // Mode invalid
}
}
else{
return;
}
}
else if (Broche < 16) {
GPIO -> CRH &= ~(0x1 << Broche *4) & ~(0x1 << Broche *4 +1) & ~(0x1 << Broche *4 + 2) & ~(0x1 << Broche *4 + 3); // Clean bits
if (IO == 0){ //Input
if (strcmp(Mode,"Floating")) {
GPIO -> CRH |= (0x1 << Broche *4) | (0x1 << Broche * 4 + 1);
}
else if (strcmp(Mode,"Pull-Up") || strcmp(Mode,"Pull-Down")){
GPIO -> CRH |= (0x1 << 6*4 + 1);
}
else {
return; // Mode invalid or doesn't exist
}
}
else if ( IO < 5) { // Output
GPIO -> CRH |= (0xIO << Broche * 4 + 2); // Frequency mode
if (strcmp(Mode, "Open-Drain")){
GPIO -> CRH |= (0x1 << Broche *4);
}
else if (strcmp(Mode, "Push-Pull Alterne")){
GPIO -> CRH |= (0x1 << Broche *4 + 1);
}
else if (strcmp(Mode, "Open-Drain Alterne")){
GPIO -> CRH |= (0x1 << Broche * 4) | (0x1 << Broche * 4 + 1);
}
else {
return; // Mode invalid or doesn't exits
}
}
else{
return; // IO invalid
}
}
else{
return; // Pin number invalid
}
}

View file

@ -0,0 +1,24 @@
#include "stm32f10x.h"
#include "MyTimer.h"
#include "Nucleo.h"
#include "Timer.h"
#include "DriverGPIO.h"
#include "Gironde.h"
void configEncoder(TIM_TypeDef * Timer){
Timer -> CCMR1 |= TIM_CCMR1_CC1S;
Timer -> CCMR2 |= TIM_CCMR1_CC2S;
Timer -> CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP);
Timer -> CCMR1 &= ~(TIM_CCMR1_IC1F);
Timer -> CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP);
Timer -> CCMR2 &= ~(TIM_CCMR1_IC2F);
Timer -> SMCR &= ~TIM_SMCR_SMS;
Timer -> SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1;
Timer -> CR1 |= TIM_CR1_CEN;
Timer -> ARR = 0xFFFF;
}
void configChannel(){
MyGPIO_Init(GPIOA,7,In_Floating );
MyGPIO_Init(GPIOA,8,In_Floating );
}

View file

@ -0,0 +1,36 @@
#include "stm32f10x.h"
#include "../Include/Timer.h"
#include "../Include/PWM.h"
#include "../Include/DriverGPIO.h"
// Variables
#define ARR_TIM1 0xFFAD
#define PSC_TIM1 0xFF
#define ARR_TIM2 0xFFAD
#define PSC_TIM2 0x0225
#define ARR_TIM3 0x2CF
#define PSC_TIM3 0x0
volatile int g_tick_count;
void Test(void){
// Signal
g_tick_count++;
MyGPIO_Toggle(GPIOA, 8);
}
void ConfigureTimers(){
MyTimer_Base_Init(TIM2, ARR_TIM2, PSC_TIM2);
MyTimer_Base_Init(TIM1, ARR_TIM1, PSC_TIM1);
MyTimer_Base_Init(TIM3, ARR_TIM2, PSC_TIM2);
EnableTimer(TIM1);
EnableTimer(TIM2);
EnableTimer(TIM3);
}
void ConfigureIT(){
//MyTimer_ActiveIT(TIM2, 4, Test); //start interruption with priority 4
//MyTimer_ActiveIT(TIM1, 4, Test); //start interruption with priority 4
MyTimer_ActiveIT(TIM3, 4, Test); //start interruption with priority 4
}
void ConfigurePWM(){
MyTimer_PWM(TIM1, 1);
MyTimer_Set_DutyCycle(TIM1, 1, 20.0);
}