Merging yohan to master

This commit is contained in:
Yohan Boujon 2023-04-07 13:38:25 +02:00
commit 3376dbff59
13 changed files with 364 additions and 94 deletions

BIN
assets/raspberry_config.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 KiB

BIN
assets/raspberry_uart.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
assets/resultcmd0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

View file

@ -41,4 +41,4 @@ void ADC1_2_IRQHandler(void)
(*pFncADC) (); /* appel indirect de la fonction */
MyADC_Base_Start(ADC1);
ADC1->SR &= ~ADC_SR_EOC; //Prochaine lecture pouvant <20>tre effectu<74>e.
}
}

View file

@ -190,4 +190,4 @@ void MyTimer_DutyCycle(TIM_TypeDef * Timer, char Channel, unsigned int DutyCycle
Timer->CCR4 = RC;
break;
}
}
}

View file

@ -2,83 +2,156 @@
#include "gpio.h"
//faire GPIO
void (* pFncUART) (uint8_t data); /* d<>claration d<>un pointeur de fonction */
char data1 = 0x00;
char data2 = 0x00;
char data3 = 0x00;
void MyUART_Init_Periph (void (* ptrFonction)(uint8_t))
{
pFncUART = ptrFonction; /* affectation du pointeur */
}
int MyUART_setClockBit(MyUART_Struct_Typedef * UARTStructPtr)
{
if (UARTStructPtr->UART == USART1)
{
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
USART1->BRR = 72000000/(UARTStructPtr->BaudRate); //Calculating the baudrate depending on the clock frequency
return 0;
}
else if (UARTStructPtr->UART == USART2)
{
RCC->APB1ENR |= RCC_APB1ENR_USART2EN;
USART2->BRR = 36000000/(UARTStructPtr->BaudRate);
return 0;
}
else if (UARTStructPtr->UART == USART3)
{
RCC->APB1ENR |= RCC_APB1ENR_USART3EN;
USART3->BRR = 36000000/(UARTStructPtr->BaudRate);
return 0;
}
else {
return 1;
}
}
uint8_t MyUART_GetInterruptNum(USART_TypeDef * UART)
{
if(UART == USART1)
{
return USART1_IRQn;
}
else if(UART == USART2)
{
return USART2_IRQn;
}
else if(UART == USART3)
{
return USART3_IRQn;
}
else{
return 0;
}
}
void MyUART_ActiveIT(USART_TypeDef * UART, uint8_t Prio)
{
uint32_t IRQNumber = MyUART_GetInterruptNum(UART);
UART->CR1 |= (USART_CR1_RXNEIE); //Interruption active pour la reception UNIQUEMENT
NVIC->IP[IRQNumber] |= (Prio << 0x4); //Prio de l'interruption (p.197 manuel reference RM0008 pour ADC1_IRQn)
NVIC->ISER[1] |= (0x1<<(IRQNumber-32)); //Active l'interruption au niveau NVIC (p.119 manuel programming pour ISER[1])
}
void MyUART_Init(MyUART_Struct_Typedef * UARTStructPtr){
if (UARTStructPtr->UART == USART1)
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
if (UARTStructPtr->UART == USART2)
RCC->APB2ENR |= RCC_APB1ENR_USART2EN;
if (UARTStructPtr->UART == USART3)
RCC->APB2ENR |= RCC_APB1ENR_USART3EN;
MyUART_setClockBit(UARTStructPtr); //Clock enable and setting the baud.
UARTStructPtr->UART->CR1 = 0x00; // Clear ALL
UARTStructPtr->UART->CR1 |= USART_CR1_UE;
UARTStructPtr->UART->CR1 |= ((UARTStructPtr->length)<<12); //Setting the Length of the data transmitted
UARTStructPtr->UART->BRR = 72000000/(UARTStructPtr->BaudRate);
UARTStructPtr->UART->CR1 |= ((UARTStructPtr->Wlengh)<<12);
UARTStructPtr->UART->CR1 |= (0x1<<10);
if(UARTStructPtr->Wparity == parity_none)
UARTStructPtr->UART->CR1 &= ~(0x1<<10);
if(UARTStructPtr->Wparity == parity_odd)
UARTStructPtr->UART->CR1 |= (0x1<<9);
if(UARTStructPtr->Wparity == parity_even)
UARTStructPtr->UART->CR1 &= ~(0x1<<9);
if(UARTStructPtr->Wstop == stop1b)
UARTStructPtr->UART->CR2 &= ~(0x3<<12);
if(UARTStructPtr->Wstop == stop2b){
UARTStructPtr->UART->CR2 &= ~(0x3<<12);
UARTStructPtr->UART->CR2 |= (0x1<<13);
UARTStructPtr->UART->CR1 &= ~(0x3<<9); //reset CR1 9-10 bits, Parity Selection
if(UARTStructPtr->parity != parityNone) //if parity is enabled
{
UARTStructPtr->UART->CR1 |= (UARTStructPtr->parity<<9); //depending on the parity changing the 9th bit, and set 10th bit to 1
}
UARTStructPtr->UART->CR1 |= (USART_CR1_TE | USART_CR1_RE | USART_CR1_UE | USART_CR1_RXNEIE);
NVIC_EnableIRQ(USART1_IRQn);
UARTStructPtr->UART->CR2 &= ~(0x3<<12); //reset CR2 13-12 bits, Stop bits
if(UARTStructPtr->stop != stopBit1) //if stop bits > 1
{
UARTStructPtr->UART->CR2 |= (UARTStructPtr->stop<<12); //depending on the stop changing the 12th and 13th bit.
}
//TxD Enable, RxD Enable, USART Global Enable
UARTStructPtr->UART->CR1 |= (USART_CR1_TE | USART_CR1_RE);
MyUART_ActiveIT(UARTStructPtr->UART,1);
}
void MyUART_InitGPIO(MyUART_Struct_Typedef * UARTStructPtr)
{
MyGPIO_Struct_TypeDef rxd,txd;
if(UARTStructPtr->UART == USART1)
{
rxd = (MyGPIO_Struct_TypeDef){GPIOA,10,In_Floating};
txd = (MyGPIO_Struct_TypeDef){GPIOA,9,AltOut_Ppull};
}
else if(UARTStructPtr->UART == USART2) {
rxd = (MyGPIO_Struct_TypeDef){GPIOA,3,In_Floating};
txd = (MyGPIO_Struct_TypeDef){GPIOA,2,AltOut_Ppull};
}
else if(UARTStructPtr->UART == USART3) {
rxd = (MyGPIO_Struct_TypeDef){GPIOB,11,In_PullUp};
txd = (MyGPIO_Struct_TypeDef){GPIOB,10,AltOut_Ppull};
}
else {
return;
}
MyGPIO_Init(&rxd);
MyGPIO_Init(&txd);
}
void MyUART_Send(MyUART_Struct_Typedef *UART, uint8_t data)
{
UART->UART->DR = data;
//du DR au Registre de Transmission, on attend que le shift register ai récupéré le DR
while (!(UART->UART->SR & USART_SR_TXE));
}
uint8_t MyUART_Receive(MyUART_Struct_Typedef *UART)
{
while (!(UART->UART->SR & USART_SR_RXNE)); // Si RXNE est mis à 1, alors on vient de recevoir une donnée !
uint8_t data = UART->UART->DR; // Read the data.
UART->UART->SR &= ~USART_SR_RXNE; //flag to 0
return data;
}
void USART1_IRQHandler(void)
{
// Check if receive data register not empty
if(USART1->SR & USART_SR_RXNE)
{
data1 = USART1->DR; // read received data
// do something with received data
}
if((USART1->SR & USART_SR_RXNE) == USART_SR_RXNE) //verify the flag
{
if (pFncUART != 0)
(*pFncUART) (USART1->DR); /* appel indirect de la fonction */
USART1->SR &= ~USART_SR_RXNE; //flag to 0
}
}
void USART2_IRQHandler(void)
{
// Check if receive data register not empty
if(USART2->SR & USART_SR_RXNE)
{
data2 = USART2->DR; // read received data
// do something with received data
}
if((USART2->SR & USART_SR_RXNE) == USART_SR_RXNE) //verify the flag
{
if (pFncUART != 0)
(*pFncUART) (USART2->DR); /* appel indirect de la fonction */
USART2->SR &= ~USART_SR_RXNE; //flag to 0
}
}
void USART3_IRQHandler(void)
{
// Check if receive data register not empty
if(USART3->SR & USART_SR_RXNE)
if((USART3->SR & USART_SR_RXNE) == USART_SR_RXNE) //verify the flag
{
data3 = USART3->DR; // read received data
// do something with received data
if (pFncUART != 0)
(*pFncUART) (USART3->DR); /* appel indirect de la fonction */
USART2->SR &= ~USART_SR_RXNE; //flag to 0
}
}
char MyUART_Read(MyUART_Struct_Typedef * UARTStructPtr)
{
if(UARTStructPtr->UART == USART1)
return data1;
else if(UARTStructPtr->UART == USART2)
return data2;
else if(UARTStructPtr->UART == USART3)
return data3;
else
return 0xFF;
}
/* exemple utilisation fonction :
UART1.UART = USART1; // choix UART (USART1, USART2, USART3)

View file

@ -2,26 +2,35 @@
#define UART_H
#include "stm32f10x.h"
typedef enum {
lengthBit8,
lengthBit9
} MyUART_Enum_Length;
typedef enum {
parityNone,
parityEven = 0b10,
parityOdd = 0b11
} MyUART_Enum_Parity;
typedef enum {
stopBit1,
stopBit0d5,
stopBit2,
stopBit1d5
} MyUART_Enum_StopBits;
typedef struct {
USART_TypeDef * UART;
unsigned int BaudRate;
unsigned char Wlengh;
unsigned char Wparity;
unsigned char Wstop;
uint32_t BaudRate;
MyUART_Enum_Length length;
MyUART_Enum_Parity parity;
MyUART_Enum_StopBits stop;
}MyUART_Struct_Typedef;
#define parity_none 0x0
#define parity_even 0x1
#define parity_odd 0x2
#define Wlengh8 0x0
#define Wlengh9 0X1
#define stop1b 0x0
#define stop2b 0x2
void MyUART_Init(MyUART_Struct_Typedef * UARTStructPtr);
void USART1_IRQHandler(void);
void USART2_IRQHandler(void);
void USART3_IRQHandler(void);
char MyUART_Read(MyUART_Struct_Typedef * UARTStructPtr);
#endif
void MyUART_InitGPIO(MyUART_Struct_Typedef * UARTStructPtr);
void MyUART_Send(MyUART_Struct_Typedef *UART, uint8_t data);
uint8_t MyUART_Receive(MyUART_Struct_Typedef *UART);
void MyUART_Init_Periph (void (* ptrFonction)(uint8_t));
#endif

33
implementation/remote.c Normal file
View file

@ -0,0 +1,33 @@
#include "remote.h"
#include "gpio.h"
MyUART_Struct_Typedef uartCool = {USART1,9600,lengthBit8,parityNone,stopBit1};
void remote(uint8_t data)
{
MyUART_Send(&uartCool,data);
int8_t signedData = (int8_t)data;
if(signedData > 0)
{
MyGPIO_Set(GPIOA,5);
}
else {
MyGPIO_Reset(GPIOA,5);
}
}
void initRemote(void)
{
MyUART_InitGPIO(&uartCool);
MyUART_Init(&uartCool);
MyUART_Init_Periph(remote);
}
void testRemote(void)
{
MyUART_Send(&uartCool,'s');
MyUART_Send(&uartCool,'a');
MyUART_Send(&uartCool,'l');
MyUART_Send(&uartCool,'u');
MyUART_Send(&uartCool,'t');
}

11
implementation/remote.h Normal file
View file

@ -0,0 +1,11 @@
#ifndef REMOTE_H
#define REMOTE_H
#include "uart.h"
//XBEE 9600 baud, zero parite, 1 bit de stop,
void remote(uint8_t data);
void initRemote(void);
void testRemote(void);
#endif

51
implementation/remote.md Normal file
View file

@ -0,0 +1,51 @@
# Initialisation de l'UART avec un Raspberry Pi
### Yohan Boujon
---
Pour tester l'intégration de l'UART j'ai décidé de me focaliser uniquement sur l'UART 1 du STM32. Afin de simplifier la programmation côté microcontrôleur, et aussi d'apprendre plus sur mon Raspberry Pi ce choix était plus complaisant.
## Configuration du Raspberry Pi
La première chose est de vérifier si les pins pour la communication UART sont dans le bon mode. Pour se faire il suffit de lancer la commande :
```bash
sudo raspi-gpio get 14-15
```
Normalement le résultat devrait être le suivant :
![sudo raspi-gpio get 14-15](../assets/resultcmd0.png)
Si func n'est pas TXD/RXD alors entrez ces commandes :
```bash
sudo raspi-gpio set 15 a5
sudo raspi-gpio set 14 a5
```
Pour rappel, le terme après 15/14 détermine l'alternative function, plus d'informations peuvent être trouvées ici [Détail sur les différentes ALT](https://blog.boochow.com/wp-content/uploads/rpi-gpio-table.png). Pour vérifier si vous voulez UART1 ou UART 0, avec la commande ```ls -l /dev``` il est possible de voir le lien symbolique réalisé entre votre serialX et la pin réelle de votre pi. Choisissez celle que vous voulez, mais si vous avez besoin du bluetooth, **ttyS0** est la liaison serie recommandée. *(Dans notre cas elle est reliée à l'UART1)*
Pour finalement activer du côté hardware l'UART, il faut entrer la commande suivante :
```bash
sudo raspi-config
```
Après cela une fenêtre bleue avec divers paramètres sont disponible. Ce qui nous intéresse c'est donc d'activer le port UART, soit :
**3 Interface Option** > **I6 Serial Port** > **No** > **Yes**
Il faut ensuite vérifier que le fichier de configuration accepte bien l'UART, soit :
```bash
sudo nano /boot/config.txt
```
et entrez les paramètres suivants en fin de ligne :
```
enable_uart=1
dtoverlay=disable-bt
dtoverlay=uart1,txd1_pin=14,rxd1_pin=15
```
Le premier active l'UART, le second désactive le bluetooth *(peut poser des problèmes sur l'UART 1 ou 0, dépendant des cas)* et enfin le dernier active le txd/rxd 0/1 pour une certaine pin.
Faites **CTRL+X** , **'y'** et rebootez votre Raspberry :
```bash
sudo reboot
```
Ensuite il ne reste plus qu'à tester ! à l'aide du programme [**minicom**](https://doc.ubuntu-fr.org/minicom) il est possible de tester simplement l'UART en rebouclant les GPIO comme ici :
![Raspberry Pi](../assets/raspberry_config.jpg)
Maintenant testons avec la commande
```bash
minicom -b 9600 -o -D /dev/ttyS0
```
![Raspberry Pi UART](../assets/raspberry_uart.jpg)

View file

@ -132,7 +132,7 @@ Reset_Handler PROC
EXPORT Reset_Handler [WEAK]
IMPORT __main
IMPORT SystemInit
LDR R0, =SystemInit
a LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0

View file

@ -1,4 +1,5 @@
#include "stm32f10x.h"
<<<<<<< HEAD
#include "servo.h"
#include "motoreducteur.h"
#include "rtc.h"
@ -17,3 +18,21 @@ int main (void)
while(1){};
}
=======
#include "MyI2C.h"
#include "MySPI.h"
#include "remote.h"
#include "gpio.h"
int main (void)
{
MyGPIO_Struct_TypeDef led = {GPIOA,5,Out_PullUp}; //led
MyGPIO_Init(&led); //test des leds pour ignorer les contraintes liées aux différents ports
initRemote();
testRemote();
while(1){
};
}
>>>>>>> origin/yohan

View file

@ -125,7 +125,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1468,53,1889,480,1)(121=1469,437,1890,864,1)(122=875,109,1296,536,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=1285,87,1879,838,1)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
<Name>(1010=1460,461,1836,1018,1)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1009,499,1430,926,1)(121=1469,437,1890,864,0)(122=875,109,1296,536,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=105,137,504,482,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=879,71,1473,822,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=1014,43,1462,457,1)(161=568,150,1016,564,1)(162=1351,117,1799,531,1)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -142,9 +142,15 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<<<<<<< HEAD
<LineNumber>13</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
=======
<LineNumber>29</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134219444</Address>
>>>>>>> origin/yohan
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
@ -153,27 +159,36 @@
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\Source\Principale.c</Filename>
<ExecCommand></ExecCommand>
<<<<<<< HEAD
<Expression></Expression>
=======
<Expression>\\cool_Simule\Source/Principale.c\29</Expression>
>>>>>>> origin/yohan
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<<<<<<< HEAD
<LineNumber>12</LineNumber>
=======
<LineNumber>28</LineNumber>
>>>>>>> origin/yohan
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<Address>134219442</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Source\Principale.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
<Expression>\\cool_Simule\Source/Principale.c\28</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<<<<<<< HEAD
<LineNumber>15</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134218740</Address>
@ -222,18 +237,20 @@
<Bp>
<Number>5</Number>
<Type>0</Type>
=======
>>>>>>> origin/yohan
<LineNumber>8</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<Address>134219308</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Source\Principale.c</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
<Expression>\\cool_Simule\Source/Principale.c\8</Expression>
</Bp>
</Breakpoint>
<WatchWindow1>
@ -290,16 +307,6 @@
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\GPIOA</Name>
<WinId>35905</WinId>
</Entry>
<Entry>
<Name>System Viewer\GPIOB</Name>
<WinId>35904</WinId>
</Entry>
</SystemViewers>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
@ -446,22 +453,35 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<<<<<<< HEAD
<LineNumber>24</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134219864</Address>
=======
<LineNumber>10</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134219708</Address>
>>>>>>> origin/yohan
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<<<<<<< HEAD
<Filename>C:\Users\alixc\Desktop\Scolarité\INSA\Cours\Microcontroleur\voilier-team-1\implementation\rtc.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\cool_reel\../implementation/rtc.c\24</Expression>
=======
<Filename>..\implementation\remote.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\cool_reel\../implementation/remote.c\10</Expression>
>>>>>>> origin/yohan
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<<<<<<< HEAD
<LineNumber>25</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134219874</Address>
@ -495,6 +515,9 @@
<Number>3</Number>
<Type>0</Type>
<LineNumber>23</LineNumber>
=======
<LineNumber>9</LineNumber>
>>>>>>> origin/yohan
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -503,7 +526,11 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<<<<<<< HEAD
<Filename>..\implementation\rtc.c</Filename>
=======
<Filename>..\implementation\remote.c</Filename>
>>>>>>> origin/yohan
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
@ -562,6 +589,12 @@
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<SystemViewers>
<Entry>
<Name>System Viewer\USART1</Name>
<WinId>35905</WinId>
</Entry>
</SystemViewers>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
@ -590,6 +623,18 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\implementation\remote.c</PathWithFileName>
<FilenameWithoutPath>remote.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -600,7 +645,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileNumber>3</FileNumber>
<FileType>4</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -612,9 +657,27 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<<<<<<< HEAD
<FileNumber>3</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
=======
<FileNumber>4</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\driver\adc.c</PathWithFileName>
<FilenameWithoutPath>adc.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>5</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
>>>>>>> origin/yohan
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\driver\gpio.c</PathWithFileName>
@ -624,7 +687,11 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<<<<<<< HEAD
<FileNumber>4</FileNumber>
=======
<FileNumber>6</FileNumber>
>>>>>>> origin/yohan
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -636,7 +703,11 @@
</File>
<File>
<GroupNumber>2</GroupNumber>
<<<<<<< HEAD
<FileNumber>5</FileNumber>
=======
<FileNumber>7</FileNumber>
>>>>>>> origin/yohan
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -646,6 +717,7 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<<<<<<< HEAD
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>6</FileNumber>
@ -702,6 +774,8 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
=======
>>>>>>> origin/yohan
</Group>
<Group>