Цитата(AlexandrY @ Mar 1 2018, 01:59)

А с HAL вы ничего не понимая идете хэлп по HAL-у, но там увидите просто продоксигененые шапки из сорсов все тех же функций.
Удрученно вы в любом случае начнете копать мануал на чип пытаясь сопоставить имена переменных структур и битов регистров.
Итого непроизводительные потери времени.
Извините, но не удержался..... Вот опять, Александр, вы прямо как бог, знаете кто и как работает и говорите за всех. Я вам предлагаю говорить за себя, остальные подчерпнут ваш опыт. Пишите....
Цитата(AlexandrY @ Mar 1 2018, 01:59)

А с HAL вы я ничего не понимая идете иду хэлп по HAL-у, но там увидите вижу просто продоксигененые шапки из сорсов все тех же функций.
Удрученно вы я в любом случае начну копать мануал на чип пытаясь сопоставить имена переменных структур и битов регистров.
Итого непроизводительные потери времени.
Я могу расказать за себя, за свой опыт.... и так, смотрим код с 239 строки, на примере короткого куска
Код
// Time Base configuration
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1;
TIM_TimeBaseStructure.TIM_Period = SYSTEM_CORE_CLOCK / (int)m_conf->foc_f_sw;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
Мне всё понятно. даже комментариев не надо. (кстати, в хорошем коде мало комментариев, имхо). Можно даже куб открыть и на функциональной схеме увидеть эти прескалеры и т.п.
Но я не знаю, все ли поля структуры TIM_TimeBaseStructure здесь проинициализированны? Может там есть ещё какие поля и в них мусор. У меня в качестве IDE - теплоламповый Eclipse. Удерживая Ctrl кликаю по TIM_TimeBaseStructure..... далее по типу структуры и попадаю в stm32l0xx_hal_tim.h на объявление структуры TIM_Base_InitTypeDef, буквально в пару кликов (РОВНО В ДВА КЛИКА), (под рукой открытый проект с хал стм32л0, далее на его примере).... и вижу объявление структуры TIM_Base_InitTypeDef
Код
/** @defgroup TIM_Base_Configuration TIM base configuration structure
* @{
*/
/**
* @brief TIM Time base Configuration Structure definition
*/
typedef struct
{
uint32_t Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.
This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */
uint32_t CounterMode; /*!< Specifies the counter mode.
This parameter can be a value of @ref TIM_Counter_Mode */
uint32_t Period; /*!< Specifies the period value to be loaded into the active
Auto-Reload Register at the next update event.
This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF. */
uint32_t ClockDivision; /*!< Specifies the clock division.
This parameter can be a value of @ref TIM_ClockDivision */
} TIM_Base_InitTypeDef;
но там увидите просто продоксигененые шапки из сорсов все тех же функций. вижу что в структуре 4 поля. По каждому полю справка. Например поле CounterMode в коде приинциализированно значением TIM_COUNTERMODE_CENTERALIGNED1, а мне надо вверх.
Какие битики и в каком регистре ставить чтоб считало вверх? А какие бывают значения у CounterMode ? Вижу комент "This parameter can be a value of @ref TIM_Counter_Mode". Ctrl+F "TIM_Counter_Mode" и нахожу в этомже *.h
Цитата
/** @defgroup TIM_Counter_Mode Counter mode
* @{
*/
#define TIM_COUNTERMODE_UP ((uint32_t)0x0000U)
#define TIM_COUNTERMODE_DOWN TIM_CR1_DIR
#define TIM_COUNTERMODE_CENTERALIGNED1 TIM_CR1_CMS_0
#define TIM_COUNTERMODE_CENTERALIGNED2 TIM_CR1_CMS_1
#define TIM_COUNTERMODE_CENTERALIGNED3 TIM_CR1_CMS
меняю у себя в коде TIM_COUNTERMODE_CENTERALIGNED1 на TIM_COUNTERMODE_UP.
И заметьте.... я ещё в хелп не залез, в котором Александр не видит ни чего кроме шапок. Если даже у меня нет примера кода инита таймера... заглядываю в хелп.... (и вот я только добрался до хелпа на хал....) я хочу выяснить в хелпе из чего состоит структура TIM_Base_InitTypeDef? Не буду копипастить, сделаю скрин хелпа сюда, дабы сохранить форматирование исходного документа (см аттач). По мойму всё понятно, всё отлично продокументированно. Конечно, чтобы знать как работает таймер, нужно смотреть даташит. Если знаете что у таймера 5 режимов счета, вам не нужно ползать по регистрам и битикам, а просто выбрать нужный из енума TIM_Counter_Mode. Итого
непроизводительные потери времени экономиться время и производительность возрастает.
Вот как-то так я работаю с HAL/LL/SPL.
Что касается аналогичного кода от Александра - то по мне, так это адский код ("адский" не путать с "плохой"). По мне, так код на хале гораздо понятнее. но это моё субъективное мнение..... Это всё касательно темы ТС.
ps 2АлександрУ, вопрос риторический: Вы хоть раз в хелп по халу заглядывали, прежде чем писать, что в хелпе ни чего нет, кроме шапки из сорсов?
pps
Цитата
Когда дойдет дело до эксплуатации придет такой человечек из службы технического надзора и зарубит всю вашу машину со всеми блоками вместе взятыми покуда вы ему не дадите заключение о безопасности ПО.
Ну как же человек хочет чтобы мир был таким, как в его фантазиях. Прямо удивительно, как продавливаются фантазии за реальность!!! Религия, причем агрессивно навязываемая!