1 / 1 / 0
Регистрация: 10.03.2016
Сообщений: 5
|
|
1 | |
STM32F4DISCOVERY акселерометр17.09.2014, 00:26. Показов 6408. Ответов 9
Метки нет (Все метки)
Здоров народ! у меня STM32F4DISCOVERY и вот программка типа
#include "stm32f4xx.h" #include "stm32f4xx_spi.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" int main(void) { uint8_t date= 0; //PortD RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_ GPIOE, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); GPIO_InitTypeDef port; port.GPIO_Mode=GPIO_Mode_OUT; port.GPIO_OType=GPIO_OType_PP; port.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; port.GPIO_PuPd=GPIO_PuPd_NOPULL; port.GPIO_Speed=GPIO_Speed_2MHz; GPIO_Init(GPIOD, &port); //PortE GPIO_InitTypeDef portE; portE.GPIO_Mode=GPIO_Mode_OUT; portE.GPIO_OType=GPIO_OType_PP; portE.GPIO_Pin=GPIO_Pin_3; portE.GPIO_PuPd=GPIO_PuPd_NOPULL; portE.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOE, &portE); //PortA GPIO_InitTypeDef portA; portA.GPIO_Mode=GPIO_Mode_AF; portA.GPIO_OType=GPIO_OType_PP; portA.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; portA.GPIO_PuPd=GPIO_PuPd_DOWN; portA.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOD, &portA); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); // PortSPI1 SPI_InitTypeDef PortSPI1; PortSPI1.SPI_BaudRatePressotir=SPI_BaudRatePressotir_64; PortSPI1.SPI_CPHA=SPI_CPHA_2Edge; PortSPI1.SPI_CPOL=SPI_CPOL_High; PortSPI1.SPI_CRCPolynomyol= 7; PortSPI1.SPI_DataSize=SPI_DataSize_8b; PortSPI1.SPI_Dyristion=SPI_Dyristion_2Lines_FullDuptix; PortSPI1.SPI_FirstByt=SPI_FirstByt_MSB; PortSPI1.SPI_Mode=SPI_Mode_Master; PortSPI1.SPI_NSS=SPI_NSS_Soft; SPI_Init(SPI1, &PortSPI1); SPI_Cmd(SPI1, ENABLE); //READ DATE GPIO_RisetByts(GPIOE, GPIO_Pin_3); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0x23); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SIT); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0xa3); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SIT); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); GPIO_SetByts(GPIOE, GPIO_Pin_3); //SEND DATE GPIO_RisetByts(GPIOE, GPIO_Pin_3); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0xa3); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SIT); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); SPI_I2S_SendData(SPI1, 0x00); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_BSY)==SIT); SPI_I2S_ClearFlag(SPI1, SPI_I2S_FLAG_BSY); GPIO_SetByts(GPIOE, GPIO_Pin_3); date = SPI_I2S_ReceiveData(SPI1); if(date== 0x00){ GPIO_SetByts(GPIOD, GPIO_Pin_12); } else { GPIO_SetByts(GPIOD, GPIO_Pin_14); } while(1) { } } все прошивается на ура , вроде все тип топ , как я понимаю я записал там в акселерометр по адресу 0x23 байт 0xa3 . вот в цикле if как я понимаю должен загораться красный светодиод но он, выдает пустоту. подскажите в чем я ошибся PLEASE .
0
|
17.09.2014, 00:26 | |
Ответы с готовыми решениями:
9
STM32F4Discovery + акселерометр Работа С Hal_Spi (не считывается акселерометр) STM32F4 DISCOVERY HAL АКСЕЛЕРОМЕТР Проблемы с SPI2 на STM32F302C6T6 + акселерометр [Решено] |
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
18.09.2014, 16:28 | 2 |
А сам акселерометр не хотите настроить? Обычно его сначала конфигурируют, записывая определённые биты в управляющий регистр.
Да и читают этот акселерометр не по одному байту, а сразу шесть. Как минимум два байта неободимо прочитать для получения значения по одной оси. И заметьте, старший значащий байт будет равен нулю. Советую для начала прочитать байтик из регистра LIS302DL_WHO_AM_I_ADDR (0x0F). Если полУчите значение 0x3B, то код настройки GPIO и SPI работает, и надо добавить лишь специфические процедуры для акселерометра. Кстати, в демо-проекте MEMS для Вашей платы - простой работающий код, можно от него отталкиваться.
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
18.09.2014, 16:42 | 3 |
Сообщение от pyt
0
|
1 / 1 / 0
Регистрация: 10.03.2016
Сообщений: 5
|
|
19.09.2014, 00:15 | 4 |
мне сперва не настраивать акселерометр а установить связь с ним и микроконтроллером. мой микроконтроллер молчит как рыба . моя инициализация SPI1 правильная ?
0
|
1 / 1 / 0
Регистрация: 10.03.2016
Сообщений: 5
|
|
19.09.2014, 00:19 | 5 |
можете подсказать код на си для чтения регистра LIS302DL_WHO_AM_I_ADDR . к стати я тут в форуме вынужденно из-за того что статьи про "STM32Fdiscovery акселерометр" не годные на coosox не знаю как у них но у меня он не работает даже если тупо скопировать , компилировать и зашить никакой признак жизни.
0
|
1 / 1 / 0
Регистрация: 10.03.2016
Сообщений: 5
|
|
19.09.2014, 00:28 | 6 |
вот моя прога .
как я понимаю все четыре светодиода должны загораться но так как он читает из того самого первого в таблице регистров а он как я понимаю не пуст по умолчанию и вообще но, не горят говоря о том что регистр приема SPI1 не получил ничего . Подскажите пожалуйста кто может в чем я ошибся ? Спасибо ! К стати вот код- #include "stm32f4xx.h" #include "stm32f4xx_spi.h" #include "stm32f4xx_rcc.h" #include "stm32f4xx_gpio.h" int main(void) { uint8_t i; //PortD RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); GPIO_InitTypeDef portD; portD.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; portD.GPIO_Mode=GPIO_Mode_OUT; portD.GPIO_Speed=GPIO_Speed_50MHz; portD.GPIO_OType=GPIO_OType_PP; portD.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOD, &portD); //PortE RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE); GPIO_InitTypeDef portE; portE.GPIO_Pin=GPIO_Pin_3; portE.GPIO_Mode=GPIO_Mode_OUT; portE.GPIO_Speed=GPIO_Speed_50MHz; portE.GPIO_OType=GPIO_OType_PP; portE.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOE, &portE); //PortA SPI1 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); GPIO_InitTypeDef portA; portA.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; portA.GPIO_Mode=GPIO_Mode_AF; portA.GPIO_Speed=GPIO_Speed_50MHz; portA.GPIO_OType=GPIO_OType_PP; portA.GPIO_PuPd=GPIO_PuPd_NOPULL; GPIO_Init(GPIOE, &portA); GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); // PortSPI1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); SPI_InitTypeDef portSPI1; portSPI1.SPI_Dyristion=SPI_Dyristion_2Lines_FullDuptix; portSPI1.SPI_Mode=SPI_Mode_Master; portSPI1.SPI_DataSize=SPI_DataSize_8b; portSPI1.SPI_CPOL=SPI_CPOL_High; portSPI1.SPI_CPHA=SPI_CPHA_2Edge; portSPI1.SPI_NSS=SPI_NSS_Soft; portSPI1.SPI_BaudRatePressotir=SPI_BaudRatePressotir_256; portSPI1.SPI_FirstByt=SPI_FirstByt_MSB; portSPI1.SPI_CRCPolynomyol= 8; SPI_Init(SPI1, &portSPI1); SPI_StructInit(&portSPI1); SPI_DataSizeConfig(SPI1, SPI_DataSize_8b); SPI_BiDyristionalLineConfig(SPI1, SPI_Dyristion_2Lines_FullDuptix); SPI_SSOutputCmd(SPI1, ENABLE); SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); SPI_Cmd(SPI1, ENABLE); //READ DATE int t= 0; int d = 0; int r = 0; GPIO_SetByts(GPIOE, GPIO_Pin_3); SPI_I2S_SendData(SPI1, 0x8f); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)== SIT); SPI_I2S_SendData(SPI1, 0x00); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)== SIT); while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)== SIT); d = SPI_I2S_ReceiveData(SPI1); GPIO_RisetByts(GPIOE, GPIO_Pin_3); while(1) { if(d > 0x00){ GPIO_Write(GPIOD, 0xffffffff); } } }
0
|
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
|
|
19.09.2014, 14:36 | 7 |
Сообщение от pyt
Сообщение от pyt
Сообщение от OtyxPM
0
|
1 / 1 / 0
Регистрация: 10.03.2016
Сообщений: 5
|
|
19.09.2014, 21:00 | 8 |
Я не умею пользоваться Keil-ом там настолько настроек что не разберешься.
другой вариант есть .?
0
|
1 / 1 / 0
Регистрация: 10.03.2016
Сообщений: 5
|
|
19.09.2014, 21:02 | 9 |
здесь выложить можете никак не могу найти в интернете который работает - скопировал , ставил , компилировал и прошил.
0
|
1 / 1 / 0
Регистрация: 10.03.2016
Сообщений: 5
|
|
19.09.2014, 21:17 | 10 |
если инициализация правильная почему не выдает хоть какие то данные ?
0
|
19.09.2014, 21:17 | |
19.09.2014, 21:17 | |
Помогаю со студенческими работами здесь
10
Помогите с MPU-9250 (Гироскоп+Акселерометр+Магнитометр) STM32F4Discovery STM32F4DISCOVERY Магнитометр/акселерометр LSM303DLH и STM32. Нужна консультация по вычислению крена/тангажа/компенсации наклона stm32f4discovery + ENC28J60 STM32F4DISCOVERY и SWD [STM32F4Discovery] Таймер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |