Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 21.01.2013, 12:03  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от wellcom Посмотреть сообщение
будем ждать
Изделия все мелкосерийные (до нескольких тысяч), изменеия частые, соответственно сложился определённый стиль. Это позволяет быстро вносить изменения, поддерживать единую версию проги, для разных версий п/п, быстро перейти на другой проц. Своё мнение не навязываю, просто описываю к чему я пришёл. Понятно что вариантов решения великое множество.
1. Создаю файл в проекте local.h. Где описываю аппаратуру. Примерно так:
Код:
// Порт PA0. PWR_GOOD
#define PWR_GOOD						0
#define PWR_GOOD_PORT					GPIOA
// Порт PA1. ETH_REF_CLK
#define ETH_REF_CLK						1
#define ETH_REF_CLK_PORT				GPIOA
// Порт PA2. ETH_MDIO
#define ETH_MDIO						2
#define ETH_MDIO_PORT					GPIOA
// Порт PA3. LCD_LIGHT
#define LCD_LIGHT						3
#define LCD_LIGHT_PORT					GPIOA
// Порт PA4. AT45DB_CS
#define AT45DB_CS						4
#define AT45DB_CS_PORT					GPIOA
// Порт PA5. SPI1_CLK
#define SPI1_CLK						5
#define SPI1_CLK_PORT					GPIOA
....
// Инициализация порта A
#define	PORTA_INIT			GPIOA-›MODER = PIN2X(PWR_GOOD,AN)|PIN2X(ETH_REF_CLK,AF)|PIN2X(ETH  _MDIO,AF)|PIN2X(LCD_LIGHT,AF)|PIN2X(AT45DB_CS,OUT)  |PIN2X(SPI1_CLK,AF)|\
							PIN2X(SPI1_MISO,AF)|PIN2X(ETH_CRS_DV,AF)|PIN2X(USA  RT1_TX,AF)|PIN2X(USART1_RX,AF)|PIN2X(USART1_CTS,AF  )|PIN2X(USART1_RTS,AF)\
							|PIN2X(JTAG_JTMS_SWDIO,AF)|PIN2X(JTAG_JTCK_SWCLK,A  F)|PIN2X(JTAG_JTDI,AF);\
							GPIOA-›OSPEEDR = PIN2X(ETH_REF_CLK,S100MHZ)|PIN2X(ETH_MDIO,S100MHZ)  |PIN2X(LCD_LIGHT,S2MHZ)|PIN2X(AT45DB_CS,S100MHZ)|P  IN2X(SPI1_CLK,S50MHZ)|\
							PIN2X(SPI1_MISO,S50MHZ)|PIN2X(ETH_CRS_DV,S100MHZ)|  PIN2X(USART1_TX,S2MHZ)|PIN2X(USART1_RX,S2MHZ)|PIN2  X(USART1_CTS,S2MHZ)|PIN2X(USART1_RTS,S2MHZ);\
							GPIOA-›PUPDR = PIN2X(PWR_GOOD,PUP_NOPULL)|PIN2X(ETH_REF_CLK,PUP_U  P)|PIN2X(ETH_MDIO,PUP_UP)|PIN2X(LCD_LIGHT,PUP_UP)|  PIN2X(AT45DB_CS,PUP_UP)|PIN2X(SPI1_CLK,PUP_UP)|\
							PIN2X(SPI1_MISO,PUP_UP)|PIN2X(ETH_CRS_DV,PUP_UP)|P  IN2X(USART1_TX,PUP_UP)|PIN2X(USART1_RX,PUP_UP)|PIN  2X(USART1_CTS,PUP_UP)|PIN2X(USART1_RTS,PUP_UP)\
							|PIN2X(JTAG_JTMS_SWDIO,PUP_UP)|PIN2X(JTAG_JTCK_SWC  LK,PUP_DOWN)|PIN2X(JTAG_JTDI,PUP_UP);\
							GPIOA-›ODR = PIN(AT45DB_CS);\
							GPIOA-›AFR[0] = PIN4X(ETH_REF_CLK,ETHAF)|PIN4X(ETH_MDIO,ETHAF)|PIN  4X(LCD_LIGHT,TIM2AF)|PIN4X(SPI1_CLK,SPI1AF)|\
							PIN4X(SPI1_MISO,SPI1AF)|PIN4X(ETH_CRS_DV,ETHAF);\
							GPIOA-›AFR[1] = PIN4X(USART1_TX-8,USART1AF)|PIN4X(USART1_RX-8,USART1AF)|PIN4X(USART1_CTS-8,USART1AF)|PIN4X(USART1_RTS-8,USART1AF)
......
// Работа с ADC битами портов
#define	ADC_CS_ON			ADC_CS_PORT-›BSRRH = PIN(ADC_CS); DelayTacts(TIM_SMALLWAIT,NANOSEC(130))				// Подать выборку АЦП
#define	ADC_CS_OFF			ADC_CS_PORT-›BSRRL = PIN(ADC_CS)				// Снять выборку АЦП
#define	ADC_CHAN(N)			ADC_PORT-›BSRRL = ((N&0x3)‹‹ADC_A0);ADC_PORT-›BSRRH = (((~N)&0x3)‹‹ADC_A0)
#define	ADC_CSI0			ADC_PORT-›BSRRH = PIN(ADC_E2)|PIN(ADC_E3);ADC_PORT-›BSRRL = PIN(ADC_E1)
#define	ADC_CSI1			ADC_PORT-›BSRRH = PIN(ADC_E1)|PIN(ADC_E3);ADC_PORT-›BSRRL = PIN(ADC_E2)
#define	ADC_CSR				ADC_PORT-›BSRRH = PIN(ADC_E1)|PIN(ADC_E2);ADC_PORT-›BSRRL = PIN(ADC_E3)
// Работа с ножкой готовности АЦП
#define	ADCPIN_DOUT			GPIOC-›MODER = PIN2X(SPI3_MISO,AF)|MODER_C
#define	ADCPIN_RDY			GPIOC-›MODER = PIN2X(SPI3_MISO,IN)|MODER_C
// Настройка прерывания по готовности (свалу импульса)
#define	ADCPIN_RDY_INTEN	EXTI-›IMR |= PIN(SPI3_MISO)
#define	ADCPIN_RDY_INTDIS	EXTI-›IMR &= ~PIN(SPI3_MISO)
#define	ADCPIN_RDY_INIT		EXTI-›FTSR |= PIN(SPI3_MISO); SYSCFG-›EXTICR[2] = PORTC_PIN‹‹12
#define	ADCPIN_RDY_INTCLR	EXTI-›PR = PIN(SPI3_MISO)
По этому файлу фактически можно восстановить суть схемы принципиальной, и понять общее подключение.... Если имеется несколько модификаций платы я ввожу версию и делаю условные ветки, где описываю отличия.
Особо хочу отметить, что не использую макросы типа PINSET, а стараюсь использовать макросы несущие смысловую нагрузку. Например LEDON. Это даёт возможность например поменять полярность ТОЛЬКО в файле local.h, не затрагивая программу.
===
По сути видно что установка / сброс линии порта есть лишь одна команда. И вызывать для этого функцию, как это сделано в стандартной библиотеке, совершенно избыточно. Примерно также работают и другие узлы и блоки.
2. Пишу драйвер аппаратуры проца. Например spi.
3. Пишу драйвер оборудования на основе, драйвера 2. Например драйвер AD7192 и at45db.
Драйвер аппаратуры пишу таким образом чтобы работал софтовый один в один.
При таком подходе софтовый драйвер как правило переносится с проца на проц практически без изменений. Сразу после объявления пинов в local.h. То есть вы можете подключить софтовые драйвера в свой новый проект в новый камень и начать работать. (Драйвера оборудования тем более переносятся). А потом заменить софтовые драйвера на аппаратные.
Реклама:
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
wellcom (21.01.2013)
Непрочитано 21.01.2013, 12:55  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Мда .... В этой каше разбираться без стакана ...

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

Если Вы одиночка, то можно делать что угодно и как угодно, но в команду, боюсь, Вас с такими подходами могут и не взять.
Boba_spb вне форума  
Непрочитано 21.01.2013, 14:10  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

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

Ну например ШИМ подсветки:
Инициализация:
Код:
  // Инициализация таймера ШИМ подсветки
  TIM_PWM_LIGHT-›CR1 = TIM_CR1_CEN /*| TIM_CR1_ARPE*/;			// Включить таймер
  TIM_PWM_LIGHT-›CCMR2 = /*TIM_CCMR2_OC4CE |*/ TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1;// PWM1
  TIM_PWM_LIGHT-›CCER = TIM_CCER_CC4E;		// Включить канал CH4
  TIM_PWM_LIGHT-›PSC = FPWM_PSC-1;			// Прескалер 
  TIM_PWM_LIGHT-›ARR = FPWM_MAX-1;			// Частота ШИМ 200 Гц
Управление:
Код:
	  TIM_PWM_LIGHT-›CCR4 = teklight;
SasaVitebsk вне форума  
Непрочитано 21.01.2013, 15:54  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от SasaVitebsk Посмотреть сообщение
На самом деле Ваш подход я тоже приветствую.
Это не мой подход - это правило -"При изменении "своих бит" в переменных, а тем более в регистрах НИКОГДА НЕ ЗАТРАГИВАТЬ биты, которые к тебе не относятся.

Хорошо если устройство подключено и инициализируется в начале программы, а если на лету ?

Если Вы не видите преимуществ, то это не значит что их нет.
Boba_spb вне форума  
Непрочитано 21.01.2013, 16:38  
EXIS
Прописка
 
Регистрация: 20.02.2006
Сообщений: 284
Сказал спасибо: 9
Сказали Спасибо 6 раз(а) в 6 сообщении(ях)
EXIS на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Разбираюсь с EXTI, что такое прерывание (interrupt) понятно. А вот что такое событие (event) и для чего оно нужно и чем отличается от прерывания понять не могу, может кто знает. И кстати, куда ведет стрелка? (выделено красным)

Figure 20 из RM0008.
Миниатюры:
Нажмите на изображение для увеличения
Название: nvic.JPG
Просмотров: 50
Размер:	23.1 Кб
ID:	42555  
EXIS вне форума  
Непрочитано 21.01.2013, 16:42  
neyvert
Прописка
 
Регистрация: 29.06.2010
Сообщений: 104
Сказал спасибо: 14
Сказали Спасибо 9 раз(а) в 7 сообщении(ях)
neyvert на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Вот почитай!
http://easyelectronics.ru/arm-uchebn...reryvanij.html
neyvert вне форума  
Непрочитано 22.01.2013, 10:26  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Boba_spb Посмотреть сообщение
Если Вы не видите преимуществ, то это не значит что их нет.
А если Вы не видете недостатков в своём подходе, то это тоже не значит, что их нет.
Собирается команда. Она пишет на каком уровне? Или у вас она пишет на уровне периферии?. Обычно используется логический уровень. То есть уровень задач. Одна задача может использовать и, как правило использует несколько драйверов. Таким образом, на уровне железа разные разработчики используют одни драйвера. Пример - работа с архивами spi/dataflash.. Второй - измерительная - spi/АЦП... Тот же dataflash используется всеми для сохранения ошибок... И если каждый будет городить огород, то плохо заканчивается.
Поэтому дрова пишет один. Остальные подключают дрова и работают в прикладном уровне.
Последний проект пишу один. Такое тоже бывает. Практически весь проект написал в QT. Всё эмулировал. Сейчас допиливаю в железе. Вообще планирую перенести практически всё в QT. Очень мне понравилось в плане отладки.... Можно наработать драйвера и 90% нового проекта отлаживать на большом брате. Как обычно времени не хватает ... Попробую в след проекте ...
SasaVitebsk вне форума  
Непрочитано 22.01.2013, 11:24  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

К примеру.
Вы думаете, что один и тот же человек пишет программу для измерения по 16 изолированным ADC, перед которыми стоят коммутаторы, для измерения "джентельменского набора" (токи, напряжения, потенциометры, термопары, термосопротивления) с контролем обрыва линий и прочей диагностики, и программу обмена по Ethernet c кучей всяких всяких сообщений и сервер HTTP.
Причем это не уренометр, а именно универсальный измерительный модуль с утверждением типа и всеми вытекающими последствиями.

А все это крутится на одном ARMe.

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

А еще надо упраалять этим модулем с PC, т.е. к нему надо OPC сервер сделать что б SCADA работала с ним. И метрологию надо для него делать.
Boba_spb вне форума  
Непрочитано 22.01.2013, 11:47  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Картинка проекта
Миниатюры:
Нажмите на изображение для увеличения
Название: project1.JPG
Просмотров: 107
Размер:	74.6 Кб
ID:	42592  
Boba_spb вне форума  
Непрочитано 22.01.2013, 14:12  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Изучаем STM32 Cortex M3

Сообщение от Boba_spb Посмотреть сообщение
К примеру.
Вы думаете, что один и тот же человек ...
Вы угадали... Я сейчас именно такое и пишу.... Один, пока ... И что? Исток новый делаю...
SasaVitebsk вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Школа АRMрестлинга Uragan90 Микроконтроллеры, АЦП, память и т.д 54 22.08.2011 16:13
ARM Cortex M3 + Linux SiMiLya Микроконтроллеры, АЦП, память и т.д 10 17.06.2011 17:20
Помогите с STM32 - очень нужно... yakuzaa Микроконтроллеры, АЦП, память и т.д 60 04.08.2010 11:04
Как добавить поддержку для STM32 SFHK Микроконтроллеры, АЦП, память и т.д 11 18.12.2009 18:09


Часовой пояс GMT +4, время: 05:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot