AnsweredAssumed Answered

STM32F4-Discovery - problem with debugging in RAM

Question asked by balance.james on Dec 8, 2013
Latest reply on Dec 8, 2013 by balance.james

Hello, I'm using CooCox IDE. I have problem with debugging in RAM and USART communication on STM32F4-Discovery. When I load my program to FLASH all works correctly , data transmit and LEDs on PD12-PD15 switch on but when I check "Debug in RAM" in Configuration Link Tab, LEDs on PD12-PD15 switch on but there is no data transmission. Thanks in advance.

Here is my code:

#include "stm32f4xx.h"

void init_RCC(void);
void init_GPIO(void);
void init_USART(void);
void USART_puts(USART_TypeDef* USARTx, volatile char *s);
void Delay(__IO uint32_t nCount);

int main(void)
{
    init_RCC();
    init_GPIO();
    init_USART();

    GPIO_SetBits(GPIOD, GPIO_Pin_12);
    GPIO_SetBits(GPIOD, GPIO_Pin_13);
    GPIO_SetBits(GPIOD, GPIO_Pin_14);
    GPIO_SetBits(GPIOD, GPIO_Pin_15);

    while(1)
    {
        USART_puts(USART6, "COOCOX \r");
        Delay(0xFFFFF);
    }
}

void init_RCC(void)
{
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE);
}

void init_GPIO(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;

    /* init  USART */
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP ;
    GPIO_Init(GPIOC, &GPIO_InitStruct);

    GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_USART6);

    //init LED
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
    GPIO_Init(GPIOD, &GPIO_InitStruct);
}

void init_USART(void)
{
    USART_InitTypeDef USART_InitStructure;

    USART_InitStructure.USART_BaudRate = 9600;
    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_Tx;

    USART_Init(USART6, &USART_InitStructure);
    USART_Cmd(USART6, ENABLE);
}

void USART_puts(USART_TypeDef* USARTx, volatile char *s)
{
    while(*s)
    {
        while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE) == RESET);
        USART_SendData(USARTx, *s);
        *s++;
    }
}

void Delay(__IO uint32_t nCount) {
  while(nCount--) {
  }
}

Outcomes