Hallo Leute, ich habe eine Frage an euch ob mir jemand helfen kann. Ich
bin noch Schüler und wir müssen in diesem Jahr ein Projekt in der Schule
machen. Wir haben ein Beispielprogramm vom Lehrer bekommen. Unsere
Aufgabe ist es funktionierende Kommunikation mit dem AS3911B Chip von
AMS herzustellen. Wir verwenden den STM32F4 und das Programm dazu Coocox
Coide. Ich würde gerne wissen wie ich eine Reihe von Bytes senden kann.
Es sollen bis zu 4 Bytes auf einmal gesendet werden. Die Kommunikation
funktioniert über SPI. Ich würde mich sehr freuen wenn ihr mir weiter
helfen könnt.
#include "SmartcontrolOS.h"
#include "CMSIS.h"
static uint8_t AccSens_SendByte(uint8_t byte){
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); /*
Loop while DR register in not emplty */
SPI_I2S_SendData(SPI1, byte);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET); /*
Wait to receive a Byte */
return (uint8_t)SPI_I2S_ReceiveData(SPI1);
}
/* Acceleration Sensor
Beschleunigungssensor
* -------------------
---------------------
* @brief This application uses the 3-axis acceleration sensor of
the STM32F4 Discovery board to
Dieses Programm benutzt den 3-Achs-Beschleunigungssensor des STM32F4
Discovery boards, um die
* measure and display the acceleration raw-vaues in meters
per second squared.
Beschleunigungs-Rohwerte zu messen und in Meter Pro Sekunde zum Quadrat
anzuzeigen.
* @param n - is the number of the application and is displayed on the
LCD during application startup.
n - ist die Nummer des Programms, die beim Programmstart auf dem LCD
angezeigt wird.
*/
void micro_App__CMSIS_SPI(ui32 n){
Resources__ExBoard_init(_, n, "CMSIS-SPI");
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_InitTypeDef
GPIO_InitStructure = {0};
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_Init(GPIOA, &GPIO_InitStructure);
DO__write(_, PE3, 1); /* Deselect : Chip Select high */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1); /* SPI SCK pin
Configuration */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1); /* SPI MISO
pin Configuration */
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1); /* SPI MOSI
pin Configuration */
SPI_I2S_DeInit(SPI1);
SPI_InitTypeDef
SPI_InitStructure = {0};
SPI_InitStructure.SPI_Direction =
SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_Init(SPI1, &SPI_InitStructure);
SPI_Cmd(SPI1, ENABLE);
DO__write(_, PE3, 0); /* Set chip select Low at the start of
the transmission */
AccSens_SendByte(0x20); /* Address: CTRL_REG1_ADDR */
AccSens_SendByte(0x40 | 0x07); /* Value: LOWPOWERMODE_ACTIVE |
XYZ_ENABLE */
DO__write(_, PE3, 1); /* Set chip select High at the end of
the transmission */
while(1){
Scheduler__wait_T_optimal(_, 500*ms);
// input
DO__write(_, PE3, 0); /* Set chip select Low at the
start of the transmission */
AccSens_SendByte(0x29 | 0x80 | 0x40); /* Address: OUT_X_ADDR |
READWRITE_CMD | MULTIPLEBYTE_CMD */
uint8_t buf[6];
int i;
for(i = 0; i < 5; i++){ /* Receive the data that will
be read from the device (MSB First) */
buf[i] = AccSens_SendByte(0x00); /* Send dummy byte (0x00) to
generate the SPI clock to AccSens (Slave device) */
}
DO__write(_, PE3, 1); /* Set chip select High at the
end of the transmission */
char input = buf[0];
DO__write(_, PB0, input & 1);
DO__write(_, PB1, input & 2);
DO__write(_, PB2, input & 4);
DO__write(_, PB3, input & 8);
DO__write(_, PB4, input & 16);
DO__write(_, PB5, input & 32);
DO__write(_, PB6, input & 64);
DO__write(_, PB7, input & 128);
// output
while(!LCD__write(_, "ax=%5.0fay=%5.0f\naz=%6.0f m/s2",
wf((i8)buf[0]), wf((i8)buf[2]), wf((i8)buf[4])));
}
}
- Wie sieht Dein Lösungsansatz aus? - Hast Du überhaupt schon angefangen? Beitrag "Einheitlicher Umgang mit faulen Schülern etc.?"
CC__Anfänger15 schrieb: > Es sollen bis zu 4 Bytes auf einmal gesendet werden. Die Kommunikation > funktioniert über SPI. Ich würde mich sehr freuen wenn ihr mir weiter > helfen könnt. > > Wie Magnus schon schrieb: Was hast Du bisher getan um das Problem zu lösen? Wo genau hängst Du fest und kommst nicht weiter? Was ist Deine konkrete Frage?
Und bitt die Bedienungsanleitung knapp über dem Editfeld lesen: "Antwort schreiben Wichtige Regeln - erst lesen, dann posten! ... Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang ..." Oder wenigstens die [c] Tags verwenden...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.