Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

1587 Server - Blandet miljø Embedded I

Lignende præsentationer


Præsentationer af emnet: "1587 Server - Blandet miljø Embedded I"— Præsentationens transcript:

1 1587 Server - Blandet miljø Embedded I
Seriel opgave Embedded I © Mercantec 2014

2 Lidt om RS-232

3 RS232 Handshake

4 UART RS-232 En UART er den komponent som skaber forbindelsen mellem uControlleren og RS232 porten.

5 Husk den rigtige hardware
Opret seriel project Husk den rigtige hardware © Mercantec 2014

6 Vælg Device GPIO og Startup
Projekt oprettelse Vælg CMSIS CORE Vælg Device GPIO og Startup © Mercantec 2014

7 Opret main Tilføje koden fra de efterfølgende slides til din main
© Mercantec 2014

8 Initialize serial #include <stm32f10x_cl.h> /* * init_serial: Initialize Serial Interface * */ void init_serial (void) { int i; /* Configure UART2 for baud */ RCC->APB2ENR |= 1 << 0; /* Enable AFIO clock */ RCC->APB2ENR |= 1 << 5; /* Enable GPIOD clock */ AFIO->MAPR |= 0x ; /* Configure used Pins */ GPIOD->CRL &= 0xF00FFFFF; GPIOD->CRL |= 0x04B00000; RCC->APB1ENR |= 0x ; /* Enable USART#2 clock */ USART2->BRR = 0x0135; /* Configure baud, */ USART2->CR3 = 0x0000; /* 8 bit, 1 stop bit, */ USART2->CR2 = 0x0000; /* no parity */ for (i = 0; i < 0x1000; i++) __NOP();/* avoid unwanted output */ USART2->CR1 = 0x200C; } © Mercantec 2014

9 Getkey/sendchar /* Write character to Serial Port * */ int sendchar (int c) { if (c == '\n') { while (!(USART2->SR & 0x0080)); USART2->DR = 0x0D; } USART2->DR = (c & 0x1FF); return (c); Read character from Serial Port (blocking read) int getkey (void) { while (!(USART2->SR & 0x0020)); return (USART2->DR); © Mercantec 2014

10 main int main(void){ /* Setup GPIO for LEDs */ RCC->APB2ENR |= 1 << 6; /* Enable GPIOE clock */ GPIOE->CRH = 0x ; /* Configure the GPIO for LEDs */ j = 0; i = 1; init_serial(); for (;;) { /* Loop forever */ while (!(USART2->SR & 0x0020)) { /* Busy-waiting */ j++; if (j==100000) { //Herefter lidt blik så vi kan de boardet kører GPIOE->ODR = i << 8; j=0; if (i>0x0100) { i=0x0001; } i = i<<1; c = getkey (); //Laes karater fra comport sendchar(c);//Skriv samme karakter retur © Mercantec 2014

11 Test Kompiler koden og flash til boarded
Tilslut USB til seriel enhed til PC Tilslut serielporten til Keil boardet Hent og installer putty eller tilsvarende terminalprogram Gå i enhedshåndtering og find COM nummer på porten Sæt Putty til det rigtigt comport og speed til og klik open Skriv i terminalvinduet og se at det virker © Mercantec 2014

12 Retarget.c #include <stdio.h> #include <rt_misc.h> #pragma import(__use_no_semihosting_swi) extern int sendchar (int c); extern int getkey (void); struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; int fputc(int ch, FILE *f) { return (sendchar(ch)); } int fgetc(FILE *f) { return (getkey()); int ferror(FILE *f) { /* Your implementation of ferror */ return EOF; void _ttywrch(int ch) { sendchar(ch); void _sys_exit(int return_code) { label: goto label; /* endless loop */ Tilføj en ny fil Retarget.c til dit bibliotek og indsæt den viste kode. Koden fortæller af fputc() skal omdirigeres til din sendchar(), og fgetc() skal omdirigeres til din getkey. © Mercantec 2014

13 printf Med retarget implementeret kan du nu anvende komandoen printf til at skrive hele sætinger og formatere dit output. Det der sker er at printf skriver til standard output med Retarget omdirigerer det til din comport. Prøv at indsætte denne kode i dit main loop i stedet for det loop du har nu. for (;;) { /* Loop forever */ printf ("Press a key. "); printf (" \r\n"); while (!(USART2->SR & 0x0020)) { /* Busy-waiting */ j++; if (j==100000) { GPIOE->ODR = i << 8; j=0; if (i>0x0100) { i=0x0001; } i = i<<1; c = getkey (); printf ("You pressed '%c'.\r\n\r\n", c);//Bemærk placeholderen ‘%c’. Bagefter erstattes dette med værdien i c © Mercantec 2014

14 scanf På samme måde kan vi også anvende scanf der læser en hel streng af gangen og først returnerer når der trykkes enter Prøv at indsætte nedenstående kode int j; int i; char c; char name[80] = { 0 }; int main(void){ ….. Din sædvænlige init kode for (;;) { /* Loop forever */ printf ("Write your name. "); printf (" \r\n"); while (!(USART2->SR & 0x0020)) { /* Busy-waiting */ …Din sædvanlige kode… } scanf("%s", name ); //c = getkey (); printf ("Hello %s welcome\r\n\r\n", name); © Mercantec 2014

15 string.h Med biblioteket kan man lave en del streng funktioner. F.eks sammenligne to strenge. Prøv at include string.h i toppen af din fil, og indsæt følgende kode efter din scanf scanf("%s", name ); if (0 == strcmp(name,"Peter")) printf ("Hello %s welcome back\r\n\r\n", name); else printf ("Hello %s you are new to me\r\n\r\n",name); © Mercantec 2014

16 Opgave Lav derefter en kode hvor man fra terminalvinduet kan få udlæst adc værdien ved at skrive +getadc. Includer biblioteket string.h som du får brug for. Lav også en kode som kan tænde og slukke for LEDs ved at skrive +setled x Lav til sidst en kode som kan aflæse hvilke LEDs som er tændt ved at skrive +getled


Download ppt "1587 Server - Blandet miljø Embedded I"

Lignende præsentationer


Annoncer fra Google