реклама на сайте
подробности

 
 
> Генератор начального кода для STM32F4хх
aleks-falcon
сообщение Oct 21 2012, 07:16
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 12-12-10
Из: С-Петербург
Пользователь №: 61 569



Изучая STM32F4хх, написал генератор начального кода для некоторых модулей. Возможны опечатки и ошибки в программе, будьте внимательны! Следующим напишу генератор для всех таймеров. Подключайтесь к написанию модулей. Прикрепленный файл  GrioGen_10_L.rar ( 710.03 килобайт ) Кол-во скачиваний: 399
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ViKo
сообщение Oct 25 2012, 04:35
Сообщение #2


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Я посмотрел предложенный генератор с помощью LibreOffice. Макросы нужно разрешить.
Посмотрел (инициализацию портов)... и удалил. Мне это не нужно. Используются те же структуры инициализации, что и в библиотеке от ST. Очень неэффективно.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Oct 25 2012, 05:59
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(ViKo @ Oct 25 2012, 06:35) *
Я посмотрел предложенный генератор с помощью LibreOffice. Макросы нужно разрешить.
Посмотрел (инициализацию портов)... и удалил. Мне это не нужно.


Ну можно вообще на ассемблере писать, или сразу в машинных кодах....

Цитата
Используются те же структуры инициализации, что и в библиотеке от ST.


И это правильно!

Цитата
Очень неэффективно.


Кого интересует эффективность выполняемого как правило один раз в программе, при ее старте? К тому-же, е надо себя считать умнее компилятора - все там достаточно эффективно.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 26 2012, 08:03
Сообщение #4


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Allregia @ Oct 25 2012, 08:59) *
Кого интересует эффективность выполняемого как правило один раз в программе, при ее старте? К тому-же, е надо себя считать умнее компилятора - все там достаточно эффективно.

Меня.
Тупить тоже не надо. Код, пример которого показываю, сочинил не компилятор.
CODE

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
00174 {
00175 uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
00176 uint32_t tmpreg = 0x00, pinmask = 0x00;
00177 /* Check the parameters */
00178 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
00179 assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
00180 assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
00181
00182 /*---------------------------- GPIO Mode Configuration -----------------------*/
00183 currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
00184 if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
00185 {
00186 /* Check the parameters */
00187 assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
00188 /* Output mode */
00189 currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
00190 }
00191 /*---------------------------- GPIO CRL Configuration ------------------------*/
00192 /* Configure the eight low port pins */
00193 if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
00194 {
00195 tmpreg = GPIOx->CRL;
00196 for (pinpos = 0x00; pinpos < 0x08; pinpos++)
00197 {
00198 pos = ((uint32_t)0x01) << pinpos;
00199 /* Get the port pins position */
00200 currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
00201 if (currentpin == pos)
00202 {
00203 pos = pinpos << 2;
00204 /* Clear the corresponding low control register bits */
00205 pinmask = ((uint32_t)0x0F) << pos;
00206 tmpreg &= ~pinmask;
00207 /* Write the mode configuration in the corresponding bits */
00208 tmpreg |= (currentmode << pos);
00209 /* Reset the corresponding ODR bit */
00210 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
00211 {
00212 GPIOx->BRR = (((uint32_t)0x01) << pinpos);
00213 }
00214 else
00215 {
00216 /* Set the corresponding ODR bit */
00217 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
00218 {
00219 GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
00220 }
00221 }
00222 }
00223 }
00224 GPIOx->CRL = tmpreg;
00225 }
00226 /*---------------------------- GPIO CRH Configuration ------------------------*/
00227 /* Configure the eight high port pins */
00228 if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
00229 {
00230 tmpreg = GPIOx->CRH;
00231 for (pinpos = 0x00; pinpos < 0x08; pinpos++)
00232 {
00233 pos = (((uint32_t)0x01) << (pinpos + 0x08));
00234 /* Get the port pins position */
00235 currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
00236 if (currentpin == pos)
00237 {
00238 pos = pinpos << 2;
00239 /* Clear the corresponding high control register bits */
00240 pinmask = ((uint32_t)0x0F) << pos;
00241 tmpreg &= ~pinmask;
00242 /* Write the mode configuration in the corresponding bits */
00243 tmpreg |= (currentmode << pos);
00244 /* Reset the corresponding ODR bit */
00245 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
00246 {
00247 GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
00248 }
00249 /* Set the corresponding ODR bit */
00250 if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
00251 {
00252 GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
00253 }
00254 }
00255 }
00256 GPIOx->CRH = tmpreg;
00257 }
00258 }

Цитирую помощь из библиотеки.
Цитата
Then user has the choice to use or not the Peripheral’s Drivers
- Case1: application code based on Standard Peripheral’s drivers API (files under Libraries\STM32F10x_StdPeriph_Driver)
- Uncomment #define USE_PERIPH_LIBRARY (default)
- In stm32f10x_conf.h file, select the peripherals to include their header file
- Use Peripheral’s drivers API to build the application; refer to next section for more information.
- In addition to the Peripheral’s drivers you can reuse/adapt the rich set of examples available within the Library to speed
your development, this allow you to started within few hours. Refer to the complete list of available examples
- Case2: application code based on Peripheral’s registers direct access
- Comment #define USE_PERIPH_LIBRARY
- Use Peripheral’s registers structure and bits definition available within stm32f10x.h to build the application

Я пошел вторым путем.
Go to the top of the page
 
+Quote Post
Allregia
сообщение Oct 26 2012, 15:01
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(ViKo @ Oct 26 2012, 10:03) *
Меня.


Это ради бога.
Просто всегда надо иметь ввиду, что "проблемы индейцев, шерифа не волнуют".

Цитата
Тупить тоже не надо. Код, пример которого показываю, сочинил не компилятор.



Это не код, это исходный текст. Код - это то. во что его компилятор превратит.
И ничего особо страшного, я там не увидел.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 26 2012, 17:58
Сообщение #6


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Allregia @ Oct 26 2012, 18:01) *
Это не код, это исходный текст. Код - это то. во что его компилятор превратит.

Пусть будет "текст"...
Цитата
И ничего особо страшного, я там не увидел.

Это я уже понял...
А вот как сделано у меня. rolleyes.gif
Код
;;;223      GPIO_PORTL_CFG(A, AFO_PP50, IN_PD_PU, AFO_PP50, GPO_OD50, IN_PD_PU, AFO_PP10, AFO_PP10, IN_PD_PU);
0000ae  49d8              LDR      r1,|L1.1040|
0000b0  48d6              LDR      r0,|L1.1036|
0000b2  6008              STR      r0,[r1,#0]
;;;224      GPIO_PORTH_CFG(A, IN_FLOAT, IN_FLOAT, IN_FLOAT, IN_FLOAT, IN_FLOAT, IN_PD_PU, AFO_PP10, AFO_PP50);  
0000b4  48d6              LDR      r0,|L1.1040|
0000b6  49d7              LDR      r1,|L1.1044|
0000b8  1d00              ADDS     r0,r0,#4
0000ba  6001              STR      r1,[r0,#0]

Не пугает?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- aleks-falcon   Генератор начального кода для STM32F4хх   Oct 21 2012, 07:16
- - SyncLair   Я так понимаю в OO я этим не смогу пользоваться ? ...   Oct 21 2012, 10:08
|- - izerg   Чем эта программа лучше того что дают сами ST? Ек...   Oct 21 2012, 11:23
|- - Aner   Цитата(izerg @ Oct 21 2012, 14:23) Чем эт...   Oct 21 2012, 18:50
- - Allregia   Цитата(aleks-falcon @ Oct 21 2012, 09...   Oct 21 2012, 16:45
- - Boriska   Отличная штука получилась. На мой взгляд, очень по...   Oct 22 2012, 10:07
- - ViKo   А почему GRIO, а не GPIO?   Oct 22 2012, 10:24
- - aleks-falcon   Опечатка. Исправим.   Oct 22 2012, 14:51
- - kolobok0   Цитата(aleks-falcon @ Oct 21 2012, 11...   Oct 23 2012, 09:50
- - aleks-falcon   Новый файл с исправлениями.   Oct 23 2012, 17:58
- - Rash   а не затруднит ли выложить в версиях офиса с расши...   Oct 24 2012, 06:54
|- - aleks-falcon   Цитата(Rash @ Oct 24 2012, 10:54) а не за...   Oct 24 2012, 14:54
|- - Allregia   Цитата(aleks-falcon @ Oct 24 2012, 16...   Oct 24 2012, 19:14
- - Aner   Не факт.   Oct 24 2012, 20:08
|- - vlad_new   Уменя то же не фурычит. Говорит офис старый стоит....   Oct 24 2012, 22:18
- - Aner   не визут ... и правильно! - сырые они. Юзайте ...   Oct 24 2012, 22:31
||- - andries5   Цитата(ViKo @ Oct 26 2012, 20:58) Не пуга...   Oct 26 2012, 19:24
||- - ViKo   Цитата(andries5 @ Oct 26 2012, 22:24) Пуг...   Oct 27 2012, 06:27
||- - andries5   Цитата(ViKo @ Oct 27 2012, 09:27) По-преж...   Oct 27 2012, 07:08
|- - KRS   Цитата(ViKo @ Oct 25 2012, 08:35) Использ...   Oct 26 2012, 19:42
|- - AHTOXA   Цитата(KRS @ Oct 27 2012, 01:42) А сейчас...   Oct 26 2012, 21:01
|- - KRS   Цитата(AHTOXA @ Oct 27 2012, 01:01) А мож...   Oct 26 2012, 21:30
|- - AHTOXA   Цитата(KRS @ Oct 27 2012, 03:30) Спасибо...   Oct 26 2012, 23:18
- - KARLSON   А мне понравилась) Хочется как всегда большего, дл...   Oct 25 2012, 04:39


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 17:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01513 секунд с 7
ELECTRONIX ©2004-2016