|
Мелкие вопросы |
|
|
|
Nov 27 2015, 11:48
|
Участник

Группа: Участник
Сообщений: 28
Регистрация: 16-10-15
Пользователь №: 88 891

|
Идет процесс бурного изучения, возникает много вопросов, все вопросы мелкие, плодить темы не хочется 1. Вопрос по отладчику Keil. Есть массив указателей, который указывает на другие массивы: Код unt8_t const* const strings[] { string1, string2... } и где то объявлены сами массивы, в некоторый момент передается номер массива, который нужно прочитать. Возможно ли в этот момент посмотреть содержимое этого массива в отладчике? 2. Имеется 1 АЦП и несколько ног, с одной нужно снимать 12битные значения, со другой 8битные. Пересчитывать пропорцией? 3. Делаю библиотеку. Где по правильному хранить платформозависимые дефайны в h или в c файле 4. Дефайны пишем заглавными буквами, а на макросы это распространяется или нет? По сути это тоже дефайны? 5. Перед некоторыми функциями ставят знак нижнего подчеркивания, что это значит? 6. Почему в библиотеках не используют структуры? Например вместо Код lcd_drawLine(x0, y0, x1, y1) не написать Код typedef struct { uint8_t x; uint8_t y; }point_t; lcd_drawLine(pont_t start_point, pont_t end_point) это же нагляднее?
|
|
|
|
|
 |
Ответов
|
Nov 29 2015, 08:00
|

Знающий
   
Группа: Участник
Сообщений: 794
Регистрация: 4-09-06
Из: Москва(ЗелАО), РФ
Пользователь №: 20 055

|
Добавлю еще один мелкий ( но при этом большой ) вопрос.
Изучал функцию GPIO_Init из стандартной библиотеки STM32F0xx_StdPeriph_Driver.
Правильно ли я понимаю, что при помощи этой функции можно сделать только такие настройки:
1) По умолчанию все ноги - входы General-purpose 2) Ноги, перечисленные в строке структуры GPIO_InitStructure.GPIO_Pin становятся выходами с одинаковыми параметрами, которые указаны в следующих строках структуры.
Если так, то вопрос, как сконфигурировать ноги порта, если там и входы разного типа ( General-purpose, аналоговые, с подтяжкой или без) и еще и выходы тоже разного типа?
Видел в англоязычных форумах более ручной способ конфигурирования, типа:
GPIOC-> MODER |= (GPIO_MODER_MODER8_0 | GPIO_MODER_MODER9_0) ;
Есть ли более подробные примеры? Среда - IAR 6.40
Сообщение отредактировал =L.A.= - Nov 29 2015, 08:01
--------------------
-Кто-то работает на совесть, а кто-то на других заказчиков.-
|
|
|
|
|
Nov 29 2015, 08:12
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(=L.A.= @ Nov 29 2015, 11:00)  Если так, то вопрос, как сконфигурировать ноги порта, если там и входы разного типа ( General-purpose, аналоговые, с подтяжкой или без) и еще и выходы тоже разного типа? Написать свой конфигуратор, например: CODE typedef enum { GPM_INPUT = 0, GPM_OUTPUT = 1, GPM_AF = 2, GPM_ANALOG = 3, } GPIO_MODE; typedef enum { GPF_AF0 = 0, GPF_AF1 = 1, GPF_AF2 = 2, GPF_AF3 = 3, GPF_AF4 = 4, GPF_AF5 = 5, GPF_AF6 = 6, GPF_AF7 = 7, GPF_AF8 = 8, GPF_AF9 = 9, GPF_AF10 = 10, GPF_AF11 = 11, GPF_AF12 = 12, GPF_AF13 = 13, GPF_AF14 = 14, GPF_AF15 = 15, } GPIO_AF; typedef enum { GPT_PP = 0, GPT_OD = 1, } GPIO_TYPE; typedef enum { SPD_2M = 0, SPD_25M = 1, SPD_50M = 2, SPD_100M = 3, } GPIO_SPD; struct pin_mode { void *port; char pin; GPIO_MODE mode; GPIO_AF af; GPIO_TYPE type; GPIO_SPD speed; }; void gpio_setup(const struct pin_mode *setup) { while(setup->port) { GPIO_TypeDef *port = (GPIO_TypeDef *)setup->port; port->MODER = (port->MODER & ~(3UL << setup->pin * 2)) | (setup->mode << setup->pin * 2); if(setup->mode == 2) // Alternate function { int p = (setup->pin > 7) ? 1 : 0, n = setup->pin & 7; port->AFR[p] = (port->AFR[p] & ~(15UL << n * 4)) | (setup->af << n * 4); } if(setup->type) port->OTYPER |= 1UL << setup->pin; else port->OTYPER &= ~(1UL << setup->pin); port->OSPEEDR = (port->OSPEEDR & ~(3UL << setup->pin * 2)) | (setup->speed << setup->pin * 2); setup++; } }
Вызов: Код const struct pin_mode ui_pins[] = { {LED1, GPM_OUTPUT, GPF_AF0, GPT_PP}, {LED2, GPM_OUTPUT, GPF_AF0, GPT_PP}, {KEY, GPM_INPUT}, NULL }; gpio_setup(ui_pins); Подтяжки добавить по аналогии с остальным.
|
|
|
|
Сообщений в этой теме
data_stack Мелкие вопросы Nov 27 2015, 11:48 slavokhire5 1. да, можете посмотреть содержимое памяти по адре... Nov 27 2015, 14:11 =L.A.= Цитата(=L.A.= @ Nov 29 2015, 12:00) Есть ... Nov 29 2015, 08:18  aaarrr Цитата(=L.A.= @ Nov 29 2015, 11:18) Я так... Nov 29 2015, 08:40 Herz Цитата(data_stack @ Nov 27 2015, 13:48) И... Nov 29 2015, 09:48 data_stack Цитата(Herz @ Nov 29 2015, 10:48) Однако ... Nov 30 2015, 09:17 slavokhire5 Я за стандартные либы. Да, местами криво. Да, жру... Nov 29 2015, 15:35 aaarrr Цитата(slavokhire5 @ Nov 29 2015, 18:35) ... Nov 29 2015, 15:50 jcxz Цитата(slavokhire5 @ Nov 29 2015, 21:35) ... Nov 30 2015, 04:49 slavokhire5 Если написать свои библиотеки на всю переферию как... Nov 29 2015, 20:56 aaarrr Вся ли периферия "жирного" STM32 использ... Nov 29 2015, 21:23 =L.A.= Еще небольшой вопросец. Есть такая штука "S... Dec 14 2015, 06:46 Сергей Борщ Цитата(=L.A.= @ Dec 14 2015, 09:46) SysTi... Dec 14 2015, 06:58  =L.A.= Цитата(Сергей Борщ @ Dec 14 2015, 09:58) ... Dec 14 2015, 07:51   Сергей Борщ Цитата(=L.A.= @ Dec 14 2015, 10:51) В док... Dec 14 2015, 08:38    =L.A.= Цитата(Сергей Борщ @ Dec 14 2015, 11:38) ... Dec 14 2015, 12:53     =L.A.= Цитата(=L.A.= @ Dec 14 2015, 15:53) Error... Dec 14 2015, 15:01      aaarrr Цитата(=L.A.= @ Dec 14 2015, 18:01) Что б... Dec 14 2015, 15:49       Ruslan1 Вопрос по определению USB подключения на STM32F0:
... Dec 15 2015, 13:35        esaulenka Цитата(Ruslan1 @ Dec 15 2015, 16:35) Вопр... Jan 12 2016, 14:09 =L.A.= STM32F0xxx
Приоритет SysTick устанавливается прог... Jan 11 2016, 18:16 Сергей Борщ Цитата(=L.A.= @ Jan 11 2016, 20:16) Приор... Jan 11 2016, 21:35
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|