Программирование 32-х разрядных МК

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

diger67 пишет:

Все что вы написали говорит о том что вы не умеете работать с документами.

Можете пояснить, как это вытекает из моего поста?

Лучше делать свои косяки, чем пытаться исправлять чужие©

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

Я могу честно признаться что сколько не читал так и не смог понять пиципы работы USB. Читаешь вроде ни чего сложного, а на практике ступор. Для кого то это семечки, но не для меня. К чему эт, да к тому что в оисании часто многое опускается, автор подразумевает что многое и так понятно.

А нужно просто себя заставить! Другого способа нет. Я когда начинал с СТМ32 просто заставил себя изучить таймера и ДМА. Зато теперь - лепота!

Цитата:

К стати библиотека SPL для f4 там есть косяк с работой BSRR, я для себя решил этот ворпрос исправив определения в CMSIS, В CMSIS, что для адептов кащумство.

Ха! Dosikus и до вас добрался? ))))))))))))))))))))))

И по поводу CMSIS просто чушь. Хотите правьте исходники, хотите заводите свой файл. Для СТМ8 вообще самый лучший вариант дописать хедер камня до конца. А что делать?

diger67
Offline
Зарегистрирован: 25.07.2015

Yarik.Yar пишет:

Можете пояснить, как это вытекает из моего поста?

Лучше делать свои косяки, чем пытаться исправлять чужие©

Я придерживаюсь мнения, если умеешь найти решение чьей то ошибки, то и свою найдешь однозначно. Обосную данное заявление. Изучая чужой код програмер вынужден понимать чужую логику. Если вы можите аонять логику другого програмера, то уж свою логику вы проанализируете на раз, два, три.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Если использование чужих библиотек оправдано лишь повышением эрудиции - оно не оправдано. Мне хватает чужих ошибок в жизни (и даже в обучении!), если они будут ещё и в коде... К тому же, когда пишешь сложный код, очень неприятно, когда ошибка обнаруживается в сторонней библиотеке, потому что на них как-то полагаешься больше, начинаешь грешить на свою логику...

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

Я придерживаюсь мнения, если умеешь найти решение чьей то ошибки, то и свою найдешь однозначно. Обосную данное заявление. Изучая чужой код програмер вынужден понимать чужую логику. Если вы можите аонять логику другого програмера, то уж свою логику вы проанализируете на раз, два, три.

Не вижу кайфа ковыряния и поиска ошибок в чужих исходниках, гораздо приоритетнее не допускать ошибок в своих.

diger67
Offline
Зарегистрирован: 25.07.2015

ssss пишет:

А нужно просто себя заставить! Другого способа нет. Я когда начинал с СТМ32 просто заставил себя изучить таймера и ДМА. Зато теперь - лепота!

Цитата:

К стати библиотека SPL для f4 там есть косяк с работой BSRR, я для себя решил этот ворпрос исправив определения в CMSIS, В CMSIS, что для адептов кащумство.

Ха! Dosikus и до вас добрался? ))))))))))))))))))))))

И по поводу CMSIS просто чушь. Хотите правьте исходники, хотите заводите свой файл. Для СТМ8 вообще самый лучший вариант дописать хедер камня до конца. А что делать?

dosikus здесь совершенно не причем. Сам он пользует все библиотеки равнозначно. Да и без него было ясно, что изучение архитектуры и периферии невозможно без RM, что касается CMSIS ну не панацея это, а путь в некуда. Большинство функций, структур, объединений и определений SPL и HAL это альтернативная версия ваших жалких потуг создать идеальное решение. Учитесь пользоваться инструментами, а не тесать каменный топорт.

diger67
Offline
Зарегистрирован: 25.07.2015

ssss пишет:

Не вижу кайфа ковыряния и поиска ошибок в чужих исходниках, гораздо приоритетнее не допускать ошибок в своих.

Свежо придание....... НО благими намериниями выстлана дорога в АД!!!!

diger67
Offline
Зарегистрирован: 25.07.2015

ssss, вот скажите мне, наколько SPL или HAL нерабочие, вы хоть раз пытались написать код использую эти библиотеки. Что то наталкивает меня на мысль что вы и не пытались, а следовательно обективно оценивать их не способны.

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

 что касается CMSIS ну не панацея это, а путь в некуда.

Жалкая отмазка почитателей серого брата РС. Здесь же кодят МК, как не крути! Вы настойчиво путаете либы верхнего и нижнего уровня, причём постоянно.

Цитата:

Большинство функций, структур, объединений и определений SPL и HAL это альтернативная версия ваших жалких потуг создать идеальное решение. Учитесь пользоваться инструментами, а не тесать каменный топорт.

Следуя вашей логике, CMSIS это молоток, SPL - лупа, а HAL - микроскоп. Так вот, мне сподручнее забивать гвозди молотком, а не микроскопом!

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

ssss пишет:

Не вижу кайфа ковыряния и поиска ошибок в чужих исходниках, гораздо приоритетнее не допускать ошибок в своих.

Свежо придание....... НО благими намериниями выстлана дорога в АД!!!!

Поверил бы! Но пока всё наоборот. Люди часто только задают вопрос, а у меня уже решение готово, с применением железа по максимуму. А что у вас? "Надо в либу заглянуть" или "А в либе такого нету!"?

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

ssss, вот скажите мне, наколько SPL или HAL нерабочие, вы хоть раз пытались написать код использую эти библиотеки. Что то наталкивает меня на мысль что вы и не пытались, а следовательно обективно оценивать их не способны.

Мне SPL хватило, чтобы понять что это гнусное и неповоротливое чудовище с ограниченностью функционала. Я плотно работаю с железом, очень плотно, и мне все эти прыжки в сторону как-то не в кайф.

diger67
Offline
Зарегистрирован: 25.07.2015

ssss пишет:

Мне SPL хватило, чтобы понять что это гнусное и неповоротливое чудовище с ограниченностью функционала. Я плотно работаю с железом, очень плотно, и мне все эти прыжки в сторону как-то не в кайф.

И что же вы плотно общаясь с железом наваяли.?Еще раз убедили меня в том что апломб заменяет образование. Мне например ни что не мешает использовать SPL  или HAL, а там где не хватает кирпичей, то я газету (CMSIS) приспосабливаю. Написание програм на asm требуют очень глубокого знания архитектуры и внутренних интерфейсов м/к, честно не готов так глубоко рыть - это не AVR.

a5021
Offline
Зарегистрирован: 07.07.2013

diger67 пишет:
a5021, смотрите при компиляции лог asm и вы все поймете деточка.

Понятие не имею, что такое "лог asm", бабушка. Вас сложно понять, но можно догадаться, что каким-то горбатым термином собственного изобретения  вы называете ассемблерный листинг, который генерирует компилятор. Если я угадал (а о смысле ваших слов можно только догадываться) ,то для вышеприведенной функции инициализации I2C на F030, он получился таким:

initI2C:
        LDR      R0,??DataTable5_2  ;; 0x4002101c
        LDR      R0,[R0, #+0]
        MOVS     R1,#+128
        LSLS     R1,R1,#+14       ;; #+2097152
        ORRS     R1,R1,R0
        LDR      R0,??DataTable5_2  ;; 0x4002101c
        STR      R1,[R0, #+0]
        MOVS     R0,#+0
        LDR      R1,??DataTable5_6  ;; 0x40005404
        STR      R0,[R1, #+0]
        MOVS     R0,#+0
        LDR      R1,??DataTable5_9  ;; 0x40005408
        STR      R0,[R1, #+0]
        MOVS     R0,#+0
        LDR      R1,??DataTable5_10  ;; 0x4000540c
        STR      R0,[R1, #+0]
        LDR      R0,??DataTable5_11  ;; 0x10020a
        LDR      R1,??DataTable5_12  ;; 0x40005410
        STR      R0,[R1, #+0]
        MOVS     R0,#+167
        LDR      R1,??DataTable5_1  ;; 0x40005400
        STR      R0,[R1, #+0]
        BX       LR               ;; return

Ровно 23 ассемблерных команды. Т.е. соврали вы примерно в 10-15 раз.

Вышеприведенный код получается при выключенной оптимизации. При включенной, код усыхает до 16 команд:

initI2C:
        LDR      R0,??DataTable4_1  ;; 0x4002101c
        LDR      R1,[R0, #+0]
        MOVS     R2,#+128
        LSLS     R2,R2,#+14       ;; #+2097152
        ORRS     R2,R2,R1
        STR      R2,[R0, #+0]
        LDR      R0,??DataTable4  ;; 0x40005400
        MOVS     R1,#+0
        STR      R1,[R0, #+4]
        STR      R1,[R0, #+8]
        STR      R1,[R0, #+12]
        LDR      R1,??DataTable4_7  ;; 0x10020a
        STR      R1,[R0, #+16]
        MOVS     R1,#+167
        STR      R1,[R0, #+0]
        BX       LR               ;; return

И чего на самом деле стоят ваши бредни насчет "гуляния по регистру" (кстати, о чем это вообще было, кто нибудь может перевести?) и двухсот-трехсот тактов? Что за чушь вы несли? Пребывали в уверенности, что вашу чепуху никто не поймет и не проверит? Экое легкомыслие.

Еще, кстати, можете для собственного просвещения сравнить это с листингом, получающимся при использовании SPL. Ну или я могу это сделать, чтобы вы уж обосрались окончательно.

Цитата:
Хватит срать в теме, учитесь кодить на серьезном железеи

Сами-то научились уже? Или, как обычно, отвлеченно побрехиваете для разнообразия о том, о чем сами никакого представления не имеете?  Тешите себя иллюзиями, что тут дурачки сплошь собрались? Никто ничего не понял, не видит и не слышит? Ну тешьте-тешьте.

Кодить учится мне особенно не нужно. Разве, что какой-то специфике, с которой еще не сталкивался. Да и серьезное железо тут ничем особо не отличается от несерьезного. Периферия везде одинаковая и то, что в старших моделях она пожирнее и понаворочаннее, принципиально ничего не меняет.

Цитата:
выскажите хоть раз свое мнеие, а не то что прочитали в интернете. А потом повторили на практике.

Можно подумать, вы чего-то знаете о моей практике. Вытаскиваете тут козявки из носа и в рот себе отправляете. Тем и довольны. Остальное сочиняете.

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

Еще раз убедили меня в том что апломб заменяет образование.

Уточните, как одно может быть связано с другим?

Цитата:

Мне например ни что не мешает использовать SPL  или HAL, а там где не хватает кирпичей, то я газету (CMSIS) приспосабливаю.

Я не танцор, мне тоже ничего не мешает. ))))))))

Ещё раз! Вы путаете понятия. Зачем юзать убогие либы там, где это и даром не нужно? Другое дело верхний уровень. ЮСБ на АСМе я уж точно писать не буду.

diger67
Offline
Зарегистрирован: 25.07.2015

ssss, уверен вы и на CMSIS USB не поднимете, такие люди конечно есть, но не среди учавствующих в данном балагане. Устал я от вашего шапито. Исходя из вашего определения asm - это язык высокого уровня, а C++ низкого, ФЕЕРИЧНО!!!! Или я не совсем понял вашей логики. И кто вам сказал что ваши либы аптимальны, понятные вам одному да, не более того.  a5021 вспомнил свое детство и как сопли жевал, не страдаю таким недугом.... Если он не понимает сути сказанного и бросается писать пост не поняв очем реч. Тогда понятно что он за програмер. Особенно если у него в програме происходит инициализация всего одной перефирии. У меня так получается при изучении или отладки работы отдельно взятой периферии. И  возвращаясь к либам, кто мешает редактировать и доаолнять ее, такого нет. Они имеют открытый текст в отличии от либ Mikroe. А главное чем отличается запись в стиле CMSIS от SPL, да посути ни чем, только арфографически, специально сравнивал количество тактов на исполнение макроса на CMSIS и функции на SPL абсолютно одинакова и вчем тогда выгода???? Только что завышенная самооценка, типа я круче, у меня есть ошибки которых нет у индусов. А главное люди которым подсовывают такое решение как лекарство от глупости, осаждают потом форумы с вопросами как это использовать и почему не работает или компилятор выдает ошибку. Хуже если человек вынужден идти в магазин за новым камнем. Зачастую в таких"либах" неучитывается проверка синтексиса или разные уровни оптимизации и использовать ее можно толко в определенной среде разработки.

a5021
Offline
Зарегистрирован: 07.07.2013

diger67 пишет:
a5021 вспомнил свое детство и как сопли жевал, не страдаю таким недугом.... Если он не понимает сути сказанного и бросается писать пост не поняв очем реч.

Как? Я опять не разглядел гениальных мыслей в ваших словах? Опять не понял? Снова не о том отвечать взялся?

Странное дело, как только вы получается по щам за свои бредовые выссказывания, тут же выясняется, что, оказывается, вас не правильно поняли. Но позвольте, как можно неправильно понять вот это:

"По этой причине они пыжаться и пишут макросы которые работают в два раза медленнее чем немног правленная родная библа на C. Ну не идиотизм полностью гулять по регистру когда надо сменить пару бит. Вот и получается что только при инициализации периферии они теряют до 200 - 300 тактов."

"Макросы, которые работают в два раза медленнее" -- полнейший бред. В ассемблере они разворачиваются в пяток инструкций. Короче уже не бывает. И в два раза быстрее тоже. В следующий раз сравнивайте листинги, а не ахинею сочиняйте, не имея ни малейшего представления о предмете.

"идиотизм полностью гулять по регистру когда надо сменить пару бит" -- полный аут. маститый программист, работающий с крутейшим железом не понимает, что запись вида:

  I2C1->CR1 = (            // I2C Control register 1
    1 * I2C_CR1_PE          |   // Peripheral enable
    1 * I2C_CR1_TXIE        |   // TX interrupt enable
    1 * I2C_CR1_RXIE        |   // RX interrupt enable
    0 * I2C_CR1_ADDRIE      |   // Address match interrupt enable
    0 * I2C_CR1_NACKIE      |   // NACK received interrupt enable
    1 * I2C_CR1_STOPIE      |   // STOP detection interrupt enable
    0 * I2C_CR1_TCIE        |   // Transfer complete interrupt enable
    1 * I2C_CR1_ERRIE       |   // Errors interrupt enable
    0 * I2C_CR1_DFN         |   // Digital noise filter
    0 * I2C_CR1_ANFOFF      |   // Analog noise filter OFF
    0 * I2C_CR1_SWRST       |   // Software reset
    0 * I2C_CR1_TXDMAEN     |   // DMA transmission requests enable
    0 * I2C_CR1_RXDMAEN     |   // DMA reception requests enable
    0 * I2C_CR1_SBC         |   // Slave byte control
    0 * I2C_CR1_NOSTRETCH   |   // Clock stretching disable
    0 * I2C_CR1_WUPEN       |   // Wakeup from STOP enable
    0 * I2C_CR1_GCEN        |   // General call enable
    0 * I2C_CR1_SMBHEN      |   // SMBus host address enable
    0 * I2C_CR1_SMBDEN      |   // SMBus device default address enable
    0 * I2C_CR1_ALERTEN     |   // SMBus alert enable
    0 * I2C_CR1_PECEN           // PEC enable
  );

Это никакое не "гулять по регистру". Вышеприведенное развернутое представление полностью идентично коду:

I2C1->CR1 = 167;

Вы спалились полностью. Вы ничего не понимаете в программировании. Вы не в состоянии распознать даже самые простые конструкции языка Си.

Ну и не менее шедевральное:

Вот и получается что только при инициализации периферии они теряют до 200 - 300 тактов.

Теперь смотрим на те 16 комманд ассемблерного листинга "инициализации" той самой "приферии" и мучительно соображаем, о чем вещал непризнанный гений программирования и повелитель крутейшего железа. Понять его порой действительно трудно, т.к. он чаще всего бормочет нечто совершенно бессвязное, не имея ни малейшего представления о предмете разговора. Отсюда все эти "логи asm", "гулять по регистру" и прочий непереводимый ишемический бред.

Профессионал, не знающий базовой терминологии и не понимающий простых конструкций языка? Знаем-знаем. Один такой живет на форуме arduino.ru. Большой специалист.

diger67
Offline
Зарегистрирован: 25.07.2015

И нахрена козе баян. Мне например вот такая простыня не нужна. Достаточно записи второго вида:

I2C1->CR1 = 167;

И если в ваших либах прописанная инициализация содержит все регистры, даже если вы их не меняете они учавствуют в этом процессе, тут и набегают лишние такты. Вы привели пример описания одного регистра, остальное упустили. Я не телепат чтобы угадывать какой бред в вашей голове. Что бы закончить этот беспридметный спор, нравиться вам проводить часы создавая понятную только вам абракадабру, делате. Меня пока устраивает то что предлогают производители. А то что мешает или работает не так и можно исправить, правлю.

diger67
Offline
Зарегистрирован: 25.07.2015

Чем ругаться из за методов работы лучше направте в нужном направлении. Есть такая либа как FstFs готовые решения для подключения CD, SRAM, USB Flash есть и как юзать их понятно. А вот с User_diskio я вроде понимаю куда рыть, но пока не до конца. В этом файле как я понимаю нужно описать функции записи, чтения стирания и инициализации устройства с которым мы собираемся общаться. Есть память samsung на 2 гига. Подключается по FMC, речь о F429, без FatFs пишется читается стирается. А вот как ее прикрутить, те внедрить эти функци в эту либу, вобщем возникли затруднения.


#ifdef USE_OBSOLETE_USER_CODE_SECTION_0
/* 
 * Warning: the user section 0 is no more in use (starting from CubeMx version 4.16.0)
 * To be suppressed in the future. 
 * Kept to ensure backward compatibility with previous CubeMx versions when 
 * migrating projects. 
 * User code previously added there should be copied in the new user sections before 
 * the section contents can be deleted.
 */
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
#endif

/* USER CODE BEGIN DECL */

/* Includes ------------------------------------------------------------------*/
#include <string.h>
#include "ff_gen_drv.h"

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/
/* Disk status */
static volatile DSTATUS Stat = STA_NOINIT;

/* USER CODE END DECL */

/* Private function prototypes -----------------------------------------------*/
           
DSTATUS USER_initialize (BYTE pdrv);
DSTATUS USER_status (BYTE pdrv);
DRESULT USER_read (BYTE pdrv, BYTE *buff, DWORD sector, UINT count);
#if _USE_WRITE == 1
  DRESULT USER_write (BYTE pdrv, const BYTE *buff, DWORD sector, UINT count);  
#endif /* _USE_WRITE == 1 */
#if _USE_IOCTL == 1
  DRESULT USER_ioctl (BYTE pdrv, BYTE cmd, void *buff);
#endif /* _USE_IOCTL == 1 */

Diskio_drvTypeDef  USER_Driver =
{
  USER_initialize,
  USER_status,
  USER_read, 
#if  _USE_WRITE
  USER_write,
#endif  /* _USE_WRITE == 1 */  
#if  _USE_IOCTL == 1
  USER_ioctl,
#endif /* _USE_IOCTL == 1 */
};

/* Private functions ---------------------------------------------------------*/

/**
  * @brief  Initializes a Drive
  * @param  pdrv: Physical drive number (0..)
  * @retval DSTATUS: Operation status
  */
DSTATUS USER_initialize (
 BYTE pdrv           /* Physical drive nmuber to identify the drive */
)
{
  /* USER CODE BEGIN INIT */
    Stat = STA_NOINIT;
    return Stat;
  /* USER CODE END INIT */
}

/**
  * @brief  Gets Disk Status 
  * @param  pdrv: Physical drive number (0..)
  * @retval DSTATUS: Operation status
  */
DSTATUS USER_status (
 BYTE pdrv       /* Physical drive nmuber to identify the drive */
)
{
  /* USER CODE BEGIN STATUS */
    Stat = STA_NOINIT;
    return Stat;
  /* USER CODE END STATUS */
}

/**
  * @brief  Reads Sector(s) 
  * @param  pdrv: Physical drive number (0..)
  * @param  *buff: Data buffer to store read data
  * @param  sector: Sector address (LBA)
  * @param  count: Number of sectors to read (1..128)
  * @retval DRESULT: Operation result
  */
DRESULT USER_read (
 BYTE pdrv,      /* Physical drive nmuber to identify the drive */
 BYTE *buff,     /* Data buffer to store read data */
 DWORD sector,   /* Sector address in LBA */
 UINT count      /* Number of sectors to read */
)
{
  /* USER CODE BEGIN READ */
    return RES_OK;
  /* USER CODE END READ */
}

/**
  * @brief  Writes Sector(s)  
  * @param  pdrv: Physical drive number (0..)
  * @param  *buff: Data to be written
  * @param  sector: Sector address (LBA)
  * @param  count: Number of sectors to write (1..128)
  * @retval DRESULT: Operation result
  */
#if _USE_WRITE == 1
DRESULT USER_write (
 BYTE pdrv,          /* Physical drive nmuber to identify the drive */
 const BYTE *buff,   /* Data to be written */
 DWORD sector,       /* Sector address in LBA */
 UINT count          /* Number of sectors to write */
)
{ 
  /* USER CODE BEGIN WRITE */
  /* USER CODE HERE */
    return RES_OK;
  /* USER CODE END WRITE */
}
#endif /* _USE_WRITE == 1 */

/**
  * @brief  I/O control operation  
  * @param  pdrv: Physical drive number (0..)
  * @param  cmd: Control code
  * @param  *buff: Buffer to send/receive control data
  * @retval DRESULT: Operation result
  */
#if _USE_IOCTL == 1
DRESULT USER_ioctl (
 BYTE pdrv,      /* Physical drive nmuber (0..) */
 BYTE cmd,       /* Control code */
 void *buff      /* Buffer to send/receive control data */
)
{
  /* USER CODE BEGIN IOCTL */
    DRESULT res = RES_ERROR;
    return res;
  /* USER CODE END IOCTL */
}
#endif /* _USE_IOCTL == 1 */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Вот в этом файле как я понял надо прописать все функции и будет мне счастье.

a5021
Offline
Зарегистрирован: 07.07.2013

diger67 пишет:
И нахрена козе баян. Мне например вот такая простыня не нужна.

Разумеется не нужна. Вы не знаете, как этим пользоваться и не понимаете, какую пользу такая запись несет.

Цитата:
Достаточно записи второго вида:

I2C1->CR1 = 167;

Замечательно. Инициализация с помощью "волшебных цифр" являет образец говнокода в самом худшем его виде. Совершенно не удивительно, что именно он вам больше всего и глянулся. Вы наверное еще не в курсе, но "волшебные цифры" обладают очень интересным свойством -- через час после их появления в коде, даже тот, кто их написал, уже не вспомнит, что они значат.

Цитата:
И если в ваших либах прописанная инициализация содержит все регистры, даже если вы их не меняете они учавствуют в этом процессе, тут и набегают лишние такты.

Бред тут набегает. Бред, который вы несете во всевозрастающих объемах.

Цитата:
Вы привели пример описания одного регистра, остальное упустили. Я не телепат чтобы угадывать какой бред в вашей голове.

Честно сказать, я уже охреневаю от такой шизофрении. "пример описания одного регистра" -- это вообще-то фрагмент функции initI2C(), опубликованной в посте №166, господин "не телепат".

Цитата:
Меня пока устраивает то что предлогают производители.

А они вам особо ничего и не "предлогают". Для F7, из ассортимента предложений доступен только HAL, которым вы никогда не пользовались и которого не знаете. Значит все предыдущие знания (если они у вас таки имеются) и опыт использованием SPL (буде таковой наличествует), псу под хвост. Начинаем учить все заново. Только теперь уже почти без свзязи с реальным железом. Для вас, мне кажется, занятие -- самое то. Поучите годик-другой, а там ST еще чего-нибудь придумает и все придется начинать по новой. Несколько подобных итераций, а там, глядишь, пенсия, внуки и почтенная старость. От перспектив аж дух захватывает.

[quote=diger67]Есть память samsung на 2 гига. Подключается по FMC, речь о F429, без FatFs пишется читается стирается. А вот как ее прикрутить, те внедрить эти функци в эту либу, вобщем возникли затруднения.[/qutoe]

А затруднений с пониманием, где вы находитесь, у вас не возникает?

diger67
Offline
Зарегистрирован: 25.07.2015

Если у вас память девичья мне вас жаль. Природа меня не обидела память, бывало такое что открыв проект через пол года я в течении часа восстанавливаю общую картину, второе, существуют коментарии, полезная знаете штука, помогает на ура. Не думаю что это вам интересно, я свободно использую HAL.

a5021
Offline
Зарегистрирован: 07.07.2013

Дадад. В ваших рассказах всегда происходят удивительные вещи.

diger67
Offline
Зарегистрирован: 25.07.2015

a5021 пишет:

Дадад. В ваших рассказах всегда происходят удивительные вещи.

Если вы не понимаете в этом вопросе моглибы и промолчать, а то как базарная баба, каждой бочке затычка. Идите гавнокодте.

a5021
Offline
Зарегистрирован: 07.07.2013

Нет, уважаемый. В вопросе я немного понимаю. Про волшебные цифры не я придумал. Просто в программировании существуют распространенные практики, как удачные, так и не очень. Всякий, кто хоть немного связан с написанием программ, обычно об этом знает. А вот вы не знаете. И это выдает в вас крайнего невежду, который пыжится, тужится, но ничего не знает и не умеет.

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

Чем ругаться из за методов работы лучше направте в нужном направлении. Есть такая либа как FstFs готовые решения для подключения CD, SRAM, USB Flash есть и как юзать их понятно. А вот с User_diskio я вроде понимаю куда рыть, но пока не до конца. В этом файле как я понимаю нужно описать функции записи, чтения стирания и инициализации устройства с которым мы собираемся общаться. Есть память samsung на 2 гига. Подключается по FMC, речь о F429, без FatFs пишется читается стирается. А вот как ее прикрутить, те внедрить эти функци в эту либу, вобщем возникли затруднения.

Странный вы какой-то, очень странный. Я бы даже сказал мутный. Два поста назад вы были "впереди планеты всей", а мы "ламеры". И теперь по безнадёге вы у нас просите помощи? Это как? ))))))))))))))))))))

Если вы делали уже проект на меге, а потом на СТМ32 два раза, то вы уже должны были вычленить основное, неизменное (высокий уровень), и различия (низкий уровень) при общении с либой FatFs. Да, нужно прикрутить своё "функции записи, чтения стирания и инициализации устройства с которым мы собираемся общаться". У вас трудности? А что, ХАЛ вам в этом совсем не помощник? Странно, да?

diger67
Offline
Зарегистрирован: 25.07.2015

ssss, когда я делал проект на AVR, то там я использовал 25Q128 по SPI. Сейчас с учетом возможностей новой архитектуры есть возможность юзать QSPI, мало того примапить ее память к общему пространству Flash, если я правильно понял апнот. Ну и надо же узнавать что то кроме определений, способов адресации итп новое. решил попробовать ознакомится с FatFs. HAL содержит только описание процедур , там еще надо будет прописывать структуры регистра статуса, дефайнить коды ошибок, понять как их привязать к FatFs. Вобщем не только в самих чипах дело. 

diger67
Offline
Зарегистрирован: 25.07.2015

Наконец добрался до NAND, пришла м/с на 128 Мбайт. Запаял на плату накидал код, считал ID, все работает. Теперь надо прикручивать к FatFs. Если все получется обязательно поделюсь, так как в интернете не нашел решения данной задачи.

a5021
Offline
Зарегистрирован: 07.07.2013

Пока STM32F030C8T6 едут из Китая, решил на STM8L051F3P6 посмотреть -- нет ли в нем чего недокументированного -- больно уж он на своего старшего братца, STM8L151F3P6, похож. Правда, там и по даташиту отличий всего ничего, но все равно, иметь за цену 8L051 более дорогого 8L151, как-то поинтересней.

Подоткнул на макетку переходник с 8L051, создал проект в IAR-е для 8L151, стал смотреть, на месте ли компаратор, который должен быть в 151-м, но отсутствует у 051-го. Сначала прошелся отладчиком. Регистры компаратора на месте, биты, допускающие изменения значений, откликаются.

Скоммутировал через Routing Interface компаратор к пинам МК (по умолчанию он снаружи недоступен).

  COMP_CSR3_VREFEN = 1;  // Connect Vref to neg. inp.
    // Connect positive input to MCU pin
  RI_ASCR1_AS6 = 1;      // Toggle analog switch AS6
  RI_ASCR2_AS14 = 1;     // Connect COMP1 to RI
  RI_IOSR1_CH19E = 1;    // Connect RI to PB0 pin
  
  COMP_CSR1_CMP1 = 3;    // Event detection on both edges

в цикле учинил опрос выхода компаратора и сделал отображение его состояния на светодиоде, подключенном к PD0.

  while(1) {
    if (COMP_CSR1_CMP1OUT == 1) {
      PD_ODR_ODR0 = 1;
    } else {
      PD_ODR_ODR0 = 0;
    }
  }

Подключив к десятому пину (PB0) регулируемый источник напряжения, стал крутить регулятор, чтобы напряжение то превышало 1.2 вольта, то становилось меньше. Светодиод стал четко загораться и тухнуть при переходе напряжения черз границу в 1.22 вольта.

Таким образом установлено наличие компаратора в STM8L051, который в даташите не упоминается. Налицо ситуация, когда кристаллы 051 и 151, скорее всего, идентичны, а модели МК отличаются только надписью на корпусе. Ситуация с F030/F031 повторяется и на STM8L.

diger67
Offline
Зарегистрирован: 25.07.2015

Странное дело, поиск чернойкошки в темной комнате дело хорошее, но это только скажем так снижение материальных издержек. Лучше бы ты икру метал.

Почитав инфу по FatFs выяснил для себя что не такой ужи срашный это зверь. Особо помогает что в CubeMX, который профессиАнальные кодеры называют Гавнокодерской примочкой есть много чего хорошего, да и HAL по сути содержит не только макроопределения, дефайны и функции низкого уровня, но и в какойто мере выступает в роли снипетов по использованию периферии. Да не оптимально, да присутствуют ошибки. Но надо же на каком то примере учиться. А поняв общий принцип работы периферии можно пото поиграться и поаптимизировать.

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

Таким образом установлено наличие компаратора в STM8L051, который в даташите не упоминается. Налицо ситуация, когда кристаллы 051 и 151, скорее всего, идентичны, а модели МК отличаются только надписью на корпусе. Ситуация с F030/F031 повторяется и на STM8L.

Прикольно, плюсую. А по поводу РОМ, РАМ, ЕЕПРОМ и ТИМ1 ничего не пробивал?

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

Почитав инфу по FatFs выяснил для себя что не такой ужи срашный это зверь.

Эти откровения нужно записать в библию, не меньше. Остаётся загадкой, как пользовались FatFs до этого.

diger67
Offline
Зарегистрирован: 25.07.2015

ssss пишет:

diger67 пишет:

Почитав инфу по FatFs выяснил для себя что не такой ужи срашный это зверь.

Эти откровения нужно записать в библию, не меньше. Остаётся загадкой, как пользовались FatFs до этого.

C CD и USB Flash driver особых проблем не было, там все прозрачно, я имею ввиду попытку создать свой модуль используя user_driver опцию для Flash подключаемой по FSMC или FMC, конкретно samsung 8 бит.

a5021
Offline
Зарегистрирован: 07.07.2013

ssss пишет:
Прикольно, плюсую. А по поводу РОМ, РАМ, ЕЕПРОМ и ТИМ1 ничего не пробивал?

TIM1 я взялся искать в первую очередь. Была призрачная надежда, что и 151Сx на этом же кристалле. Пришлось обломаться. По адресам, начиная с 0x52B0 (регистры TIM1), одни нули, хотя тот же ARR после подачи питания должен быть 0XFFFF. Запись по этим адресам попробовал -- не проходит.

ssss
Offline
Зарегистрирован: 01.07.2016

Ну что ж! Наличие компаратора тоже является неплохим результатом.

ssss
Offline
Зарегистрирован: 01.07.2016

Кому тут скорости-мегагерцев было мало? Встречайте! STM32H7хх.

diger67
Offline
Зарегистрирован: 25.07.2015

ssss пишет:

Кому тут скорости-мегагерцев было мало? Встречайте! STM32H7хх.

 Он только пявился, линейка очень короткая, большая часть анонсирована на 2017 год. Да и пока есть с чем разбиратся на существующих камнях. Не искать черных кошек в темной комнате, а работать с периферией.

a5021
Offline
Зарегистрирован: 07.07.2013

Долго ехали STM32F030C8T6 из Китая, но наконец-то приехали. Проверил.

 

Вот так на нем работает ЦАП, которого в 030 не должно быть в принципе.

В качестве теста генерируется правильный синус 25кГц.

Все подтвердилось: STM32F030C8T6 и STM32F051C8T6 -- это один и тот же МК и отличие только в надписи на корпусе.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

a5021 пишет:

Замечательно. Инициализация с помощью "волшебных цифр" являет образец говнокода в самом худшем его виде. Совершенно не удивительно, что именно он вам больше всего и глянулся. Вы наверное еще не в курсе, но "волшебные цифры" обладают очень интересным свойством -- через час после их появления в коде, даже тот, кто их написал, уже не вспомнит, что они значат.

Плюсую!!! Где-то в году 2000 или около того писал я программу контроллера управления вязальной машиной, на ассемблере (PIC), там скомпилированного кода килобайта два всего, как-то открыл исходник, подивился, неужели это я писал, каждый бит прописан, что, для чего и куда, а в комментариях ход мыслей и, что проверить )))  Хоть сейчас бери и дополняй функционал, минут 20 ознакомления будет достаточно...
 

diger67
Offline
Зарегистрирован: 25.07.2015

ua6em пишет:

a5021 пишет:

Замечательно. Инициализация с помощью "волшебных цифр" являет образец говнокода в самом худшем его виде. Совершенно не удивительно, что именно он вам больше всего и глянулся. Вы наверное еще не в курсе, но "волшебные цифры" обладают очень интересным свойством -- через час после их появления в коде, даже тот, кто их написал, уже не вспомнит, что они значат.

Плюсую!!! Где-то в году 2000 или около того писал я программу контроллера управления вязальной машиной, на ассемблере (PIC), там скомпилированного кода килобайта два всего, как-то открыл исходник, подивился, неужели это я писал, каждый бит прописан, что, для чего и куда, а в комментариях ход мыслей и, что проверить )))  Хоть сейчас бери и дополняй функционал, минут 20 ознакомления будет достаточно...
 

Кто бы спорил что коментарии в коде очень полезная штука. А если человек еще при этом понимает что происходит в черном прямоугольнике под названием м/к, совсем хорошо. На чем писать, это дело вкуса и оптимальности. Нужно быстродействие, пиши на ассемблере, сложно работать на низком уровне пользуйся языком высокого уроня. И тут уж что больше понравится, и на что хватает знаний.

a5021
Offline
Зарегистрирован: 07.07.2013

Еще немного поигрался с "недокументированным" ЦАП-ом на STM32F030C8T6. Вывод гладкой синусоиды 20кгц:

В одной клетке 0.5 вольта и 10 микросекунд.

Простая синусоида понравилась, но захотелось изобразить что-то позабористее. Вот так выглядит результат сложения трех синусоидальных сигналов с частотами 20кгц, 10кгц и 5 кгц, сдвинутых друг относительно друга по фазе  на 30 градусов:

Здесь в одной клетке те же 0.5 вольта, но 50 микросекунд.

Стоит отметить, что вывод производится силами одной только периферии -- одним таймером, одним каналом ДМА и собственно ЦАПом. Полностью аппаратно. Процессор здесь не задействован и никакой код для формирования сигнала не выполняет.

В принципе, в формировании разнообразных сигналов силами ЦАПа STM32 никакой новации нет, но чтобы это делали на МК ценой 75 центов (50 руб) мне как-то раньше видеть не приходилось.

diger67
Offline
Зарегистрирован: 25.07.2015

a5021 пишет:

В принципе, в формировании разнообразных сигналов силами ЦАПа STM32 никакой новации нет, но чтобы это делали на МК ценой 75 центов (50 руб) мне как-то раньше видеть не приходилось.

Ну так если периферия полноценна и ни чем ни отличается от того что имеется в более старших и дорогих STM чему удивлятся. Единственное различие наверное это дискретность, на более быстрых камнях диапазон  будет несколько шире.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Заинтриговали, полез смотреть на АЛИ и? Что один, что второй оба проца идут практически по одной и той же оптовой цене в 40-45 руб за корпус, а можно найти STM32F051c8t6 даже и за 35руб/шт. Просто маркировку ошибочно нанесли .. могу ещё понять, когда разница в цене "в разы", а так - стоит ли потраченное время - результату? ;)

Но, в целом - интересно, можете поиследовать ещё какие-нибудь пары? К примеру можно ли найти "дешевый аналог" STM32F429 ? А то как-то дороговастенько стоит..

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:
Заинтриговали, полез смотреть на АЛИ и? Что один, что второй оба проца идут практически по одной и той же оптовой цене в 40-45 руб за корпус, а можно найти STM32F051c8t6 даже и за 35руб/шт.

Вас не затруднит указать, где точно они продаются по такой цене? Мы либо какие-то разные али посещаем, либо я окончательно разучился пользоваться поиском. Мысли о том, что вас преследуют какие-то дикие галлюцинации, я, разумеется, допустить не могу.

Цитата:
Просто маркировку ошибочно нанесли .. могу ещё понять, когда разница в цене "в разы", а так - стоит ли потраченное время - результату? ;)

Я как-то не догоняю всей глубины этой мысли. Вы имели в виду, что если разница в разы есть, то смысл раскуривать периферию появляется, а если нет, то исчезает? Мне почему-то такой довод видится очень своеобразным и необычным.

Цитата:
Но, в целом - интересно, можете поиследовать ещё какие-нибудь пары? К примеру можно ли найти "дешевый аналог" STM32F429 ? А то как-то дороговастенько стоит..

Как-то так сложилось, что у меня нет задач под подобное железо и по этой причине я не особо ими интересуюсь.

diger67 пишет:
Единственное различие наверное это дискретность, на более быстрых камнях диапазон  будет несколько шире.

Если более быстрой будет периферия, то да, а так и на 051 все упирается в 1 мегасемпл/с быстродействия ЦАПа, с чем данный МК прекрасно справляется, и никакая дополнительная производительность тут выгод не даст.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Под оптовыми ценами на али я понимаю "цена за 1шт", где в лотах стоит стоимость доставки. Вы наверное смотрите "бесплатная доставка". Не знаю, где и что Вы ищете, но вот память 512кб 50нс в количестве 5шт мне пришла по цене 42руб за корпус. Одну потестировал - вроде даже и рабочая. :)

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:
Под оптовыми ценами на али я понимаю "цена за 1шт", где в лотах стоит стоимость доставки. Вы наверное смотрите "бесплатная доставка". Не знаю, где и что Вы ищете, но вот память 512кб 50нс в количестве 5шт мне пришла по цене 42руб за корпус.

У вас не возникает легкого ощущения, что вы вообще-то не на тот вопрос отвечаете? Я ж вроде о простой вещи спросил: где точно они продаются по названной вами цене? Махание рукой в неопределенном направлении не является ответом ни на какой вопрос, как не является подтверждением ваших слов и упоминание о совершенно другом товаре, удачно прикупленном вами по отличной цене.

Попутно вас информирую, что там "где в лотах стоит стоимость доставки", эта самая стоимость имеет очень интересное свойство -- безальтернативно меняться в зависимости от количества заказанного товара. Возможно именно упоминавшиеся вами "STM32F051c8t6 за 35руб/шт" при попытке заказать их в количестве 5 штук, преподносят как раз такой "сюрприз" незадачливому покупателю:

И какие бы сказки про белого бычка, кто тут ни рассказывал, можно купить только по такой цене и никак дешевле.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Значит у нас с Вами разный АЛИ .. ладно, мне это не интересно.

P.S. А Вы на самой алибабе - зареганы? (А то было дело, заключал там контракт давненько уже .. до сих пор помнят, и рекламку шлют и с днюхой проздравляет продаван) может в этом дело?

diger67
Offline
Зарегистрирован: 25.07.2015

a5021 пишет:

diger67 пишет:
Единственное различие наверное это дискретность, на более быстрых камнях диапазон  будет несколько шире.

Если более быстрой будет периферия, то да, а так и на 051 все упирается в 1 мегасемпл/с быстродействия ЦАПа, с чем данный МК прекрасно справляется, и никакая дополнительная производительность тут выгод не даст.

Это было лирическое отступление не более того. В целом если на борту имеется недокументированная периферия это хорошо. И тут вступает в силу заявление о недостатке библиотек SPL и выше. Понятно что для ее использования необходимо юзать CMSIS, так как скорее всего надо будет допиливать библиотеку SPL. Хотя проект созданный для RBT я без проблемм заливал в C8T, понятное дело простенькие, но все же.

a5021
Offline
Зарегистрирован: 07.07.2013

Arhat109-2 пишет:
ладно, мне это не интересно.

Убеждать на голубом глазу, что 051 даже дешевле, чем 030, вам было интересно, а как выяснилось, что это  не так, то интерес сразу пропал? Понимаю.

Цитата:
P.S. А Вы на самой алибабе - зареганы?

А мне зачем? Я поставками в промышленных объемах не занимаюсь, а себе любимому и на али куплю.

diger67 пишет:
Понятно что для ее использования необходимо юзать CMSIS, так как скорее всего надо будет допиливать библиотеку SPL.

Ничего не нужно допиливать. Что в спл, что хал-е указываем, что камень у нас, что ни на есть арийских кровей STM32F051C8T6 и все работает искаропки.

diger67
Offline
Зарегистрирован: 25.07.2015

a5021 пишет:

diger67 пишет:
Понятно что для ее использования необходимо юзать CMSIS, так как скорее всего надо будет допиливать библиотеку SPL.

Ничего не нужно допиливать. Что в спл, что хал-е указываем, что камень у нас, что ни на есть арийских кровей STM32F051C8T6 и все работает искаропки.

В целом да, камни одной линейки, вероятно и ID одинаковы, следовательно STLink ругаться не будет.

ssss
Offline
Зарегистрирован: 01.07.2016

diger67 пишет:

В целом да, камни одной линейки, вероятно и ID одинаковы, следовательно STLink ругаться не будет.

Подозреваю, что они ещё и от одного производителя, следовательно и Кейл ругаться не будет.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Итак, поднимаю тему.

Заинтересовался МК от Silabs, ко мне уже едет парочка образцов, выяснил, что смогу программировать их, используя Keil v5 (с которым и так для STM32 работаю).

Поставил через пак менеджер DFP для нужной серии, в девайс менеджере камни появились, в селекторе при создании проекта - нет...что делать?