×

Внимание

Форум находится в режиме только для чтения.

Документация, примеры STM32F4

12 года 9 мес. назад - 12 года 9 мес. назад #2483 от mrcrook
mrcrook создал тему: Документация, примеры STM32F4
Добрый день.
Кто может поделиться вменяемой (желательно на русском или на английском, но простыми словами без лишних заморочек) документацией на библиотеки "STM32F4xx StdPeriph Driver" можно даже на аналогичные под STM32F2. Под F1 можно не предлагать, они с одной стороны схожи но на практике не один пример не заработал без доработок под F4.  В основном интересует работа SDIO + FATFS, USART. Если есть исходники софтварного mp3 плеера тоже было бы неплохо поглядеть (под F1 у меня есть но там лес декодер на библиотеке helix + rtos + lcd + куча другой шняги).

p.s. Собственно USART то мне запустить удалось, но както не очень красиво.
#include "stm32f4xx.h"
uint8_t CHAR_ID;

void vUSART2_Init( void ) {
    USART_ClockInitTypeDef USART_ClockInitStruct;
    USART_InitTypeDef USART_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;

    // Enable needed clocks for uart.
    RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE );
    RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE );

    // Make sure you use 'GPIO_PinSource2' and NOT 'GPIO_Pin_2'.  Using the
    // latter will not work!
    GPIO_PinAFConfig( GPIOA, GPIO_PinSource2, GPIO_AF_USART2 );
    //GPIO_PinAFConfig( GPIOA, GPIO_PinSource3, GPIO_AF_USART2 );

    // Setup Tx / Rx pins.
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;            // Tx Pin
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_Init( GPIOA, &GPIO_InitStructure );
    //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;            // Rx Pin
    //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    //GPIO_Init( GPIOA, &GPIO_InitStructure );

    // Make sure syncro clock is turned off.
    USART_ClockStructInit( &USART_ClockInitStruct );
    USART_ClockInit( USART2, &USART_ClockInitStruct  );

    // Use defaults (except baud rate).
    USART_StructInit( &USART_InitStructure );
    USART_InitStructure.USART_BaudRate = 115200;
    USART_Init( USART2, &USART_InitStructure );

    USART2->BRR = 364;

    USART_Cmd( USART2, ENABLE );
}

void Delay(__IO uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}

void print(const char* str)
{
    int i = 0; while(str[i]) {
        USART_SendData(USART2, (uint8_t) str[i]);
        CHAR_ID = str[i]; i++;
        while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET) {}
    }
}

int main(void)
{

        vUSART2_Init();

        print("Hi_world!!!/r/n");
        while(1)
        {
;;
        }
}
не понимаю почему мне приходится в регистр BRR записывать ручками, хотя он должен сам рассчитываться из BAUDRATE. Printf из  библиотеки тоже отказывался работать поэтому пришлось наваять свою простенькую функцию.
Пишу на С'шке в Atolic TRUEStudio Lite
12 года 9 мес. назад #2484 от Денис Ягов
Денис Ягов ответил в теме Re: Документация, примеры STM32F4
Добрый день.

А чем всё таки, не устраивают примеры использования библиотечных функций периферии, которые находятся в каталоге STM32F4xx StdPeriph Driver?

Например, SDIO.
просто берём пример:

заходим в папку SDIO/uSDCard

и смотрим работу с SD картой (практически все функции копируем в свой проект). Настройку интерфейса SDIO берём из файла "stm324xg_eval_sdio_sd.c":

SD_Error SD_Init(void)
{
  __IO SD_Error errorstatus = SD_OK;
 
  /* SDIO Peripheral Low Level Init */
  SD_LowLevel_Init();

  SDIO_DeInit();

  errorstatus = SD_PowerON();

  if (errorstatus != SD_OK)
  {
    /*!< CMD Response TimeOut (wait for CMDSENT flag) */
    return(errorstatus);
  }

  errorstatus = SD_InitializeCards();

  if (errorstatus != SD_OK)
  {
    /*!< CMD Response TimeOut (wait for CMDSENT flag) */
    return(errorstatus);
  }

  /*!< Configure the SDIO peripheral */
  /*!< SDIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) */
  /*!< on STM32F4xx devices, SDIOCLK is fixed to 48MHz */
  SDIO_InitStructure.SDIO_ClockDiv = SDIO_TRANSFER_CLK_DIV;
  SDIO_InitStructure.SDIO_ClockEdge = SDIO_ClockEdge_Rising;
  SDIO_InitStructure.SDIO_ClockBypass = SDIO_ClockBypass_Disable;
  SDIO_InitStructure.SDIO_ClockPowerSave = SDIO_ClockPowerSave_Disable;
  SDIO_InitStructure.SDIO_BusWide = SDIO_BusWide_1b;
  SDIO_InitStructure.SDIO_HardwareFlowControl = SDIO_HardwareFlowControl_Disable;
  SDIO_Init(&SDIO_InitStructure);

  /*

Read CSD/CID MSD registers
*/
  errorstatus = SD_GetCardInfo(&SDCardInfo);

  if (errorstatus == SD_OK)
  {
    /*
Select Card
*/
    errorstatus = SD_SelectDeselect((uint32_t) (SDCardInfo.RCA << 16));
  }

  if (errorstatus == SD_OK)
  {
    errorstatus = SD_EnableWideBusOperation(SDIO_BusWide_4b);
  } 

  return(errorstatus);
}

файлы - приложил.

Если вам нужна файловая система FAT32 или FAT16 или FAT12, то её можно готовую взять в библиотеке STM32_OTG (пример Mass_Storage). Авторство, кстати не у ST, а какого-то доброго дядьки, который выложил её бесплатно (а ST её подключили к своему проекту). Ограничения этого софта - размер страницы 512 байт (стандартно, но на карте он теоретически может быть другим), максимальный объём памяти - 4Гб.

Нужен пример работы с USART?
Заходите в папку примеров по аналогии с SDIO. Выбираете нужный. Копируете настройки и функции работы (см вложение).

Вам не нужно описание библиотек на русском. Программирование свелось к нажатию комбинаций клавиш CTRL-C и CTRL-V.
::)
12 года 9 мес. назад #2504 от mrcrook
mrcrook ответил в теме Re: Документация, примеры STM32F4
спасибо за совет, не подумал заглянуть в примеры от плат EVAL, на дискавери с примерами туговато =) Благодаря вашей посказке таки удалось заставить работать нормально USART (однако в атолике принтф так и не заработал, перешел на кейл, все стало гут) и SDIO тоже запустил.
12 года 9 мес. назад #2507 от Денис Ягов
Денис Ягов ответил в теме Re: Документация, примеры STM32F4

спасибо за совет, не подумал заглянуть в примеры от плат EVAL, на дискавери с примерами туговато =) Благодаря вашей посказке таки удалось заставить работать нормально USART (однако в атолике принтф так и не заработал, перешел на кейл, все стало гут) и SDIO тоже запустил.


С дискавери вы погорячиись. На сайте ST - примеров на F4 дискавери мегабайт 100 архив (тут бы выложил, но не влазит). Там всё. Все примеры для USB Host/OTG/device вся периферия и т.д.  ::)
12 года 9 мес. назад #2508 от Дмитрий
Дмитрий ответил в теме Re: Документация, примеры STM32F4
Денис, а ты обращайся, мы тебе 100 мегабайт как-нибудь найдем, для хорошего человека ничего не жалко  ;)
12 года 9 мес. назад #2509 от admin
Время создания страницы: 0.062 секунд
Работает на Kunena форум