STM32 новичку в ARM что к чему
Может быть, фейк, и просто кристалла внутри нет?
- Реклама
- Сообщения: 2
- Зарегистрирован: Чт июл 30, 2020 23:12:27
Внутри что-то есть, ноги тестером прозваниваются, возможно это защитные диоды.
Когда я покупал на али, там был только один отзыв, - все хорошо и все работает. Цена в районе 100р. С этим китайцем пока не связывался.
Раньше я на али несколько таких брал (ревизия Z), тоже в районе 100р, все было нормально. С виду как новые, но из разных партий и внутри прошивка. Значит откуда-то выпаяли.
Были мысли, что теперь пришли какие-то другие микросхемы, перемаркированные.
Но тогда возникают вопросы - зачем маркировать "А", а не "Z"? и где взять на столько дешевую в таком же корпусе, что бы был смысл перемаркировать и продать за 100 рублей?
Там же, на алике, нет в подобном корпусе дешевле 100р.
Вот и возникают у меня сомнения, может все-таки это не фейк.
Наверное, можно как-то вскрыть корпус и под микроскопом посмотреть на кристалл, но эта задача не по мне.
Когда я покупал на али, там был только один отзыв, - все хорошо и все работает. Цена в районе 100р. С этим китайцем пока не связывался.
Раньше я на али несколько таких брал (ревизия Z), тоже в районе 100р, все было нормально. С виду как новые, но из разных партий и внутри прошивка. Значит откуда-то выпаяли.
Были мысли, что теперь пришли какие-то другие микросхемы, перемаркированные.
Но тогда возникают вопросы - зачем маркировать "А", а не "Z"? и где взять на столько дешевую в таком же корпусе, что бы был смысл перемаркировать и продать за 100 рублей?
Там же, на алике, нет в подобном корпусе дешевле 100р.
Вот и возникают у меня сомнения, может все-таки это не фейк.
Наверное, можно как-то вскрыть корпус и под микроскопом посмотреть на кристалл, но эта задача не по мне.
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="B_Oleg",url="/forum/viewtopic.php?p=3873365#p3873365"]Но тогда возникают вопросы - зачем маркировать "А", а не "Z"?[/uquote]
Писали, что перемаркировывают F303, причем ревизия вообще не проставлена, а по ID определяются как F0 или F1, там даже ноги питания не всегда совпадают...
Писали, что перемаркировывают F303, причем ревизия вообще не проставлена, а по ID определяются как F0 или F1, там даже ноги питания не всегда совпадают...
- Сообщения: 315
- Зарегистрирован: Пт янв 29, 2010 19:42:27
- Сообщения: 791
- Зарегистрирован: Вт июн 17, 2014 00:34:26
Добрый день, Keil переменные в watch обновляются только при остановке программы. Подскажите как это решается.
- Реклама
View - Periodic Window Update
Иван Сусанин - первый полупроводник 
- Сообщения: 791
- Зарегистрирован: Вт июн 17, 2014 00:34:26
В порядке обмена опытом для тех, кто не сталкивался.
Нынче работаю проект с F407 и опытным путем обнаружил следующее:
1. При работе передатчика USART на шину RS485 необходимо формировать сигнал управления передатчиком драйвера (у меня ADM489). При использовании DMA с USART Tx включение передатчика драйвера не вызывает вопросов и происходит перед запуском DMA. А вот выключение драйвера на передачу требует завершения последнего символа пакета. То есть в прерывании от DMA (TC), в отличии от PIC24/dsPIC33, на передачу в очереди будет стоять ДВА СИМВОЛА, а не один. Один в сдвиговом регистре и один в буфере. То есть нужно увеличить пакет не на один, а на два фиктивных символа, которые будут вырезаны из передаваемого пакета в шине сигналом управления передатчиком драйвера, который мы выключим в обработчике DMA.
2. Тут я вероятнее всего тупо не нашел в рефмануале ...
Реквесты DMA должны быть выбраны таким образом, чтобы периферия обслуживаемая этим потоком DMA и периферия генерирующая реквесты для этого потока были расположены на одной шине (APB1 или APB2). То есть, например, нельзя реквестить USART6 таймером TIM5, поскольку первый сидит на APB2, а второй на APB1. Обычно это не замечаешь, ибо не слишком часто требуется реквестить один периферийный модуль от другого...
Как то так...
Извините, если написал баян...

Нынче работаю проект с F407 и опытным путем обнаружил следующее:
1. При работе передатчика USART на шину RS485 необходимо формировать сигнал управления передатчиком драйвера (у меня ADM489). При использовании DMA с USART Tx включение передатчика драйвера не вызывает вопросов и происходит перед запуском DMA. А вот выключение драйвера на передачу требует завершения последнего символа пакета. То есть в прерывании от DMA (TC), в отличии от PIC24/dsPIC33, на передачу в очереди будет стоять ДВА СИМВОЛА, а не один. Один в сдвиговом регистре и один в буфере. То есть нужно увеличить пакет не на один, а на два фиктивных символа, которые будут вырезаны из передаваемого пакета в шине сигналом управления передатчиком драйвера, который мы выключим в обработчике DMA.
2. Тут я вероятнее всего тупо не нашел в рефмануале ...
Реквесты DMA должны быть выбраны таким образом, чтобы периферия обслуживаемая этим потоком DMA и периферия генерирующая реквесты для этого потока были расположены на одной шине (APB1 или APB2). То есть, например, нельзя реквестить USART6 таймером TIM5, поскольку первый сидит на APB2, а второй на APB1. Обычно это не замечаешь, ибо не слишком часто требуется реквестить один периферийный модуль от другого...
Как то так...
Извините, если написал баян...
- Сообщения: 6572
- Зарегистрирован: Сб янв 28, 2006 22:47:24
При попытке подключить к проекту библиотеку для управления OLED дисплеем получил от IAR следующие сообщения:
Error[Pe020]: identifier "uint16_t" is undefined C:\STM32\A\libssd1306\ssd1306.h 5
и
Error[Pe020]: identifier "uint8_t" is undefined C:\STM32\A\libssd1306\ssd1306.h 5
Я так понял, что IAR по умолчанию не понимает типов данных uint16_t и unit8_t и требует подключения библиотечного файла с описанием этих типов. Очевидно, это файл stdint.h. В файле main.с дописал #include "stdint.h", не помогло. Изменил на #include <stdint.h>, бесполезно. Нашел файл stdint.h в директории IAR в Programm Files и скопировал его в папку с проектом и через Add>Add Files добавил этот файл в проект. И ничего, все те же сообщения об ошибках... Что я делаю не так?
P.S. только написал, и тут же сам допер. Нужно было подключить библиотечный файл stdint.h в файлах самой библиотеки ssd1306.h и ssd1306.c.
Одно непонятно, это что же теперь, в каждом подключаемом к проекту файле нужно дописывать #include "stdint.h" если там присутствуют uint8_t или что-то подобное?
Error[Pe020]: identifier "uint16_t" is undefined C:\STM32\A\libssd1306\ssd1306.h 5
и
Error[Pe020]: identifier "uint8_t" is undefined C:\STM32\A\libssd1306\ssd1306.h 5
Я так понял, что IAR по умолчанию не понимает типов данных uint16_t и unit8_t и требует подключения библиотечного файла с описанием этих типов. Очевидно, это файл stdint.h. В файле main.с дописал #include "stdint.h", не помогло. Изменил на #include <stdint.h>, бесполезно. Нашел файл stdint.h в директории IAR в Programm Files и скопировал его в папку с проектом и через Add>Add Files добавил этот файл в проект. И ничего, все те же сообщения об ошибках... Что я делаю не так?
P.S. только написал, и тут же сам допер. Нужно было подключить библиотечный файл stdint.h в файлах самой библиотеки ssd1306.h и ssd1306.c.
Одно непонятно, это что же теперь, в каждом подключаемом к проекту файле нужно дописывать #include "stdint.h" если там присутствуют uint8_t или что-то подобное?
Астролябия-сама меряет, было бы что мерять!!!
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Не туда подключаете. Где нехватает, туда и подключать. main.c то причём? И кто учил .h в проект добавлять?
- Сообщения: 6572
- Зарегистрирован: Сб янв 28, 2006 22:47:24
В конечном итоге я нашел куда подключать.
Но, неужели нельзя сделать так, чтобы ничего никуда не подключать, а все типы данных определялись как-то сами по себе, и файл stdint.h автоматически подключался везде, где есть в нем необходимость? Может в настройках компилятора что-то подшаманить?
Но, неужели нельзя сделать так, чтобы ничего никуда не подключать, а все типы данных определялись как-то сами по себе, и файл stdint.h автоматически подключался везде, где есть в нем необходимость? Может в настройках компилятора что-то подшаманить?
Астролябия-сама меряет, было бы что мерять!!!
[uquote="Asmodey",url="/forum/viewtopic.php?p=3883695#p3883695"]Может в настройках компилятора что-то подшаманить?[/uquote]
И сделать проект прибитым намертво гвоздями к среде и компилятору...
Причем на уровне исходника.
И сделать проект прибитым намертво гвоздями к среде и компилятору...
Причем на уровне исходника.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Asmodey",url="/forum/viewtopic.php?p=3883695#p3883695"]Но, неужели нельзя сделать так, чтобы ничего никуда не подключать, а все типы данных определялись как-то сами по себе[/uquote]Есть старинный русский способ! По щучьему велению, по моему хотению, а ну ка код пишись сам! 
[uquote="Asmodey",url="/forum/viewtopic.php?p=3883695#p3883695"]Но, неужели нельзя сделать так, чтобы ничего никуда не подключать, а все типы данных определялись как-то сами по себе...[/uquote]
Можете через typedef определить эти уинты.
Можете через typedef определить эти уинты.
Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Zhuk72",url="/forum/viewtopic.php?p=3883767#p3883767"]Можете через typedef определить эти уинты.[/uquote]В нескольких местах определять типа, да ещё переопределяя стандартные - грубая ошибка!
- Сообщения: 1337
- Зарегистрирован: Вт ноя 19, 2019 06:10:18
Как правильно попросить линковщик положить мой массив по абсолютному адресу внутри флэш? Раньше пользовался at(), а в GCC она не поддерживается, и алгоритма действий для её замены не могу найти. Ещё оговорка: область моего массива может быть не последними адресами флэш.
в GCC есть секции и скрипт линкера. секций обычно достаточно, скрипт надо править для экзотических требований.tonyk писал(а):пользовался at(), а в GCC она не поддерживается
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 1337
- Зарегистрирован: Вт ноя 19, 2019 06:10:18
[uquote="ARV",url="/forum/viewtopic.php?p=3883811#p3883811"]
Так это и ежу понятно. Я не вижу способа как внутрь секции с кодом втиснуть мой массив.
в GCC есть секции и скрипт линкера. секций обычно достаточно, скрипт надо править для экзотических требований.[/uquote]tonyk писал(а):пользовался at(), а в GCC она не поддерживается
Так это и ежу понятно. Я не вижу способа как внутрь секции с кодом втиснуть мой массив.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
tonyk, у меня на гитхабе в stm32samples есть пример: я там выделил во флеше 1 блок для хранения настроек, а все остальное - под логи. На секциях.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
[uquote="tonyk",url="/forum/viewtopic.php?p=3883785#p3883785"]Раньше пользовался at()[/uquote]
может так (без правки скрипта линкера):
из Example Code snippets covering STM32 F0 series
https://www.st.com/en/embedded-software ... etsf0.html
может так (без правки скрипта линкера):
Код: Выделить всё
#define FLASH_PAGE_SIZE ((uint32_t)0x00000400) /* FLASH Page Size */
#define FLASH_USER_START_ADDR ((uint32_t)0x08002000) /* Start @ of user
......
FlashErase(FLASH_USER_START_ADDR);
CheckFlashErase(FLASH_USER_START_ADDR);
FlashWord16Prog(FLASH_USER_START_ADDR, (uint16_t)DATA_TO_PROG);
FlashWord16Prog(FLASH_USER_START_ADDR + 2, (uint16_t)(DATA_TO_PROG >> 16));
/* Check the programming of the address */
if ((*(uint32_t *)(FLASH_USER_START_ADDR)) != DATA_TO_PROG)
{
error |= ERROR_PROG;
}https://www.st.com/en/embedded-software ... etsf0.html


