- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- OLIMEX-E407: подключение к GPIOD...GPIOF
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- OLIMEX-E407: подключение к GPIOD...GPIOF
OLIMEX-E407: подключение к GPIOD...GPIOF
9 года 1 мес. назад - 9 года 1 мес. назад #6007
от Danunah
Danunah создал тему: OLIMEX-E407: подключение к GPIOD...GPIOF
Здравствуйте, уважаемые. Не буд отнимать ваше драгоценное время, сразу возьму быка за жабры. Купил плату Olimex-E407, версии Е. Поигрался с напаянными кнопочкой и ледиком - все получилось. нравится. Вознамерился подцепить еще кучку чего-нить, подключаемое к портам GPIOD-GPIOG, да не тут-то было. Влил прошивку, которая моргает напаянным ледом (GPIOC.13) и синхронно всеми портами D, E, F,G. Подключил к плате бред-борду, еще один светодиод. Перебирая постепенно все ножки всех портов (из вышеперечисленных), с удивлением обнаружил, что адекватно работают всего несколько пинов! Остальные не меняют своего состояния, на них всегда остается один и тот же логический уровень. При всех вариантах подтяжек и выводимых в порт значениях (вывожу либо 0, либо 0xFFFF). Прозвонил дороги от контакта порта на плате до ноги на процессоре - пока что точно звонится GPIOD, остальные не успел проверить. Собственно, хочу спросить, в чем может быть засада и как включить остальные пины? Платка, собственно, покупалась ради этого изобилия выводов, а тут такая неожиданность... Спасибо.
Последнее редактирование: 9 года 1 мес. назад пользователем Danunah.
- Rustam
- Посетитель
9 года 1 мес. назад #6008
от Rustam
Rustam ответил в теме OLIMEX-E407: подключение к GPIOD...GPIOF
Смотрите настройки портов и их тактирование. Подводных камней там быть не должно.
9 года 1 мес. назад #6009
от Danunah
Danunah ответил в теме OLIMEX-E407: подключение к GPIOD...GPIOF
Увы, настройки не вызывают сомнений - все как в гайдах из интернетов. На всякий случай привожу текст функции main. Писал конкретно этот код в Coocox, но то же самое делал и в Keil, генеря скелет в CubeMX.
P.s. Если спойлер не получился - не буцайте меня, я ими пользоваться не умею
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_rcc.h>
GPIO_InitTypeDef GPIO_InitStructure;
void Delay(__IO uint32_t nCount);
int main(void)
{
int delay;
int PortC, PortD, PortE, PortF, PortG;
int pin;
SystemInit();
delay = 0x3FFFFF;
PortC = GPIOC;
PortD = GPIOD;
PortE = GPIOE;
PortF = GPIOF;
PortG = GPIOG;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(PortD, &GPIO_InitStructure);
GPIO_Init(PortE, &GPIO_InitStructure);
GPIO_Init(PortF, &GPIO_InitStructure);
GPIO_Init(PortG, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_Init(PortC, &GPIO_InitStructure);
while(1)
{
for (pin=0; pin<16; pin++)
{
GPIO_SetBits(PortC, GPIO_Pin_13);
GPIO_SetBits(PortD, pin);
GPIO_SetBits(PortE, pin);
GPIO_SetBits(PortF, pin);
GPIO_SetBits(PortG, pin);
}
Delay(delay);
for (pin=0; pin<16; pin++)
{
GPIO_ResetBits(PortC, GPIO_Pin_13);
GPIO_ResetBits(PortD, pin);
GPIO_ResetBits(PortE, pin);
GPIO_ResetBits(PortF, pin);
GPIO_ResetBits(PortG, pin);
}
Delay(delay);
}
}
void Delay(__IO uint32_t nCount)
{
while(nCount--)
{
}
}
P.s. Если спойлер не получился - не буцайте меня, я ими пользоваться не умею
ВНИМАНИЕ: Спойлер!
#include <stm32f4xx_gpio.h>
#include <stm32f4xx_rcc.h>
GPIO_InitTypeDef GPIO_InitStructure;
void Delay(__IO uint32_t nCount);
int main(void)
{
int delay;
int PortC, PortD, PortE, PortF, PortG;
int pin;
SystemInit();
delay = 0x3FFFFF;
PortC = GPIOC;
PortD = GPIOD;
PortE = GPIOE;
PortF = GPIOF;
PortG = GPIOG;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(PortD, &GPIO_InitStructure);
GPIO_Init(PortE, &GPIO_InitStructure);
GPIO_Init(PortF, &GPIO_InitStructure);
GPIO_Init(PortG, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_Init(PortC, &GPIO_InitStructure);
while(1)
{
for (pin=0; pin<16; pin++)
{
GPIO_SetBits(PortC, GPIO_Pin_13);
GPIO_SetBits(PortD, pin);
GPIO_SetBits(PortE, pin);
GPIO_SetBits(PortF, pin);
GPIO_SetBits(PortG, pin);
}
Delay(delay);
for (pin=0; pin<16; pin++)
{
GPIO_ResetBits(PortC, GPIO_Pin_13);
GPIO_ResetBits(PortD, pin);
GPIO_ResetBits(PortE, pin);
GPIO_ResetBits(PortF, pin);
GPIO_ResetBits(PortG, pin);
}
Delay(delay);
}
}
void Delay(__IO uint32_t nCount)
{
while(nCount--)
{
}
}
9 года 1 мес. назад #6010
от umh
umh ответил в теме OLIMEX-E407: подключение к GPIOD...GPIOF
Я бы порекомендовал сначала по дергать каждую ножку отдельно, если они по отдельности изменяют состояние значит дело не в настройке, а в коде управления ножками.
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- OLIMEX-E407: подключение к GPIOD...GPIOF
Время создания страницы: 0.040 секунд