Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

STM32 e Keil

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[21] Re: STM32 e Keil

Messaggioda Foto Utentesilvio93 » 23 apr 2013, 11:12

Avatar utente
Foto Utentesilvio93
405 2 7
 
Messaggi: 26
Iscritto il: 21 apr 2013, 17:06

0
voti

[22] Re: STM32 e Keil

Messaggioda Foto UtenteTardoFreak » 23 apr 2013, 11:19

Non bastano. Devi anche includere le cartelle
CMSIS\CM3\DeviceSupport\ST\STM32F10x
CMSIS\CM3\CoreSupport

Se non ricordo male
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,4k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15764
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[23] Re: STM32 e Keil

Messaggioda Foto Utentesilvio93 » 23 apr 2013, 11:23

Sei un grande... finalmente funziona
errore stupido ma letale
Grazie infinite
Avatar utente
Foto Utentesilvio93
405 2 7
 
Messaggi: 26
Iscritto il: 21 apr 2013, 17:06

0
voti

[24] Re: STM32 e Keil

Messaggioda Foto UtenteTardoFreak » 23 apr 2013, 11:26

Fa una cosa, se hai voglia: rifai un progetto da capo dentro una cartella, ci metti dentro quella della libreria delle periferiche, prendi nota di tutti i passaggi e scrivi un articolo in modo che possa essere utile anche ad altri.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,4k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15764
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[25] Re: STM32 e Keil

Messaggioda Foto Utentesilvio93 » 23 apr 2013, 11:28

Certo, mi sembra il minimo
Avatar utente
Foto Utentesilvio93
405 2 7
 
Messaggi: 26
Iscritto il: 21 apr 2013, 17:06

1
voti

[26] Re: STM32 e Keil

Messaggioda Foto Utentesilvio93 » 23 apr 2013, 21:10

Avatar utente
Foto Utentesilvio93
405 2 7
 
Messaggi: 26
Iscritto il: 21 apr 2013, 17:06

0
voti

[27] Re: STM32 e Keil

Messaggioda Foto UtenteTardoFreak » 23 apr 2013, 22:29

Bravo!
Questo è partecipare attivamente al forum! :ok:
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,4k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15764
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[28] Re: STM32 e Keil

Messaggioda Foto Utentesilvio93 » 28 apr 2013, 16:50

Adesso che sono riuscito a compilare sorgono nuove problematiche.
La domanda dovrebbe essere pertinete a questo post dato che il problema dovrebeb ssere del compialtore, comunque se non lo fosse ne apro un altro...
Il problema è questo, vorrei utilizzare la funzione printf con usart dell'stm32. Negli esempi c'è l'implementazione di tale funzione ma non riesco ad integrala nel mio programma.
il mio codice è questo:
Codice: Seleziona tutto
#include "stm32f10x.h"
#include <stdio.h>


USART_InitTypeDef USART_InitStructure;




  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)




void GPIO_Configuration(void);
void RCC_Configuration(void);
void NVIC_Configuration(void);
void USART_Configuration(void);

int main(){
   
   RCC_Configuration();
   
   GPIO_Configuration();
   
   USART_Configuration();
   
   USART_SendData (USART1, 49);
   
      while(1){
      
      
         printf("a");
      
   }
      
}

void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure USART Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  // PA.09 USART1.TX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USART Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // PA.10 USART1.RX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
}




void RCC_Configuration(void)
{
  /* Enable GPIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  /* Enable UART clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
}


void USART_Configuration(void)
{
USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
   
   USART_Init(USART1, &USART_InitStructure);
   
   USART_Cmd(USART1, ENABLE);
   
}



PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the USART */
  USART_SendData(USART1, (uint8_t) ch);

  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
  {}

  return ch;
}

la cosa strana è che se provo a copiarlo nel progetto di esempio dove è già implemento il printf, funziona. Quindi il prblema dovrebbe stare in qualche settaggio del compilatore. Mi affido alla vostra conoscenza... :-)
Avatar utente
Foto Utentesilvio93
405 2 7
 
Messaggi: 26
Iscritto il: 21 apr 2013, 17:06

0
voti

[29] Re: STM32 e Keil

Messaggioda Foto Utentesimo85 » 28 apr 2013, 16:56

E perché non implementi la TUA printf? :mrgreen:
Avatar utente
Foto Utentesimo85
30,8k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9930
Iscritto il: 30 ago 2010, 4:59

0
voti

[30] Re: STM32 e Keil

Messaggioda Foto Utentesilvio93 » 28 apr 2013, 16:58

simo85 ha scritto:E perché non implementi la TUA printf? :mrgreen:


Ehmm... cosa intendi?

Edit: forse intendi una cosa tipo questa?
Codice: Seleziona tutto
// STM32 USART IRQ TX/RX Loop (USART1 TX PA.09, RX PA.10) VLDiscovery - sourcer32@gmail.com

#include "stm32F10x.h"
#include "STM32vldiscovery.h"

volatile char StringLoop[] = "The quick brown fox jumps over the lazy dog\r\n";

/**************************************************************************************/

void RCC_Configuration(void)
{
  /* Enable GPIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  /* Enable UART clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
}

/**************************************************************************************/

void GPIO_Configuration(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;

  /* Configure USART Tx as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;  // PA.09 USART1.TX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);

  /* Configure USART Rx as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // PA.10 USART1.RX
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

/**************************************************************************************/

void USART_Configuration(void)
{
  USART_InitTypeDef USART_InitStructure;

  /* USART resources configuration (Clock, GPIO pins and USART registers) ----*/
  /* USART configured as follow:
        - BaudRate = 115200 baud
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
  */
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

  /* USART configuration */
  USART_Init(USART1, &USART_InitStructure);

  /* Enable the USART1 */
  USART_Cmd(USART1, ENABLE);

  USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
}

/**************************************************************************************/

void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  /* Configure the NVIC Preemption Priority Bits */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

  /* Enable the USART1 Interrupt */
  NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}

/**************************************************************************************/

void USART1_IRQHandler(void)
{
  static int tx_index = 0;
  static int rx_index = 0;

  if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET) // Transmit the string in a loop
  {
    USART_SendData(USART1, StringLoop[tx_index++]);

    if (tx_index >= (sizeof(StringLoop) - 1))
      tx_index = 0;
  }

  if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) // Received characters modify string
  {
    StringLoop[rx_index++] = USART_ReceiveData(USART1);

    if (rx_index >= (sizeof(StringLoop) - 1))
      rx_index = 0;
  }
}

/**************************************************************************************/

int main(void)
{
  RCC_Configuration();

  GPIO_Configuration();

  NVIC_Configuration();

  USART_Configuration();

  while(1);
}

/**************************************************************************************/

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif

/**************************************************************************************/
Avatar utente
Foto Utentesilvio93
405 2 7
 
Messaggi: 26
Iscritto il: 21 apr 2013, 17:06

PrecedenteProssimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti