Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* фаил main.c */
- #include <stdio.h>
- #include <stdlib.h>
- #include "diag/Trace.h"
- #include "math.h"
- #include "stm32f401_discovery.h"
- #include "main.h"
- #include "Timer.h"
- #include "BlinkLed.h"
- #define BLINK_ON_TICKS (TIMER_FREQUENCY_HZ * 3 / 4)
- #define BLINK_OFF_TICKS (TIMER_FREQUENCY_HZ - BLINK_ON_TICKS)
- void ACCELERO_ReadAcc(void);
- void GYRO_ReadAng(void);
- void ACCELERO_MEMS_Test(void);
- void GYRO_MEMS_Test(void);
- void EXTILine0_Config(void);
- extern __IO uint8_t UserPressButton;
- int16_t ThresholdHigh = 1000;
- int16_t ThresholdLow = -1000;
- __IO uint8_t UserPressButton = 0;
- int
- main(int argc, char* argv[]){
- trace_puts("Hello ARM World!");
- BSP_PB_Init(BUTTON_KEY, BUTTON_MODE_EXTI);
- trace_puts("Hello ARM World!");
- trace_printf("System clock: %u Hz\n", SystemCoreClock);
- timer_start();
- float pdata[3];
- blink_led_init(12);
- blink_led_init(13);
- blink_led_init(14);
- blink_led_init(15);
- uint32_t seconds = 0;
- while(1){
- GYRO_MEMS_Test();
- ACCELERO_MEMS_Test();
- }
- }
- void ACCELERO_MEMS_Test(void){
- trace_printf("\n\n\nACCELERO_MEMS_Test\n");
- if(BSP_ACCELERO_Init() != HAL_OK){
- }
- UserPressButton = 0;
- while(!UserPressButton){
- ACCELERO_ReadAcc();
- }
- }
- void ACCELERO_ReadAcc(void){
- int16_t buffer[3] = {0};
- int16_t xval, yval = 0x00;
- BSP_ACCELERO_GetXYZ(buffer);
- xval = buffer[0];
- yval = buffer[1];
- if((abs(xval))>(abs(yval))){
- if(xval > ThresholdHigh){
- BSP_LED_On(LED5);
- timer_sleep(BLINK_ON_TICKS);
- }
- else if(xval < ThresholdLow){
- BSP_LED_On(LED4);
- timer_sleep(BLINK_ON_TICKS);
- }else{
- timer_sleep(BLINK_ON_TICKS);
- }
- }else{
- if(yval < ThresholdLow){
- BSP_LED_On(LED6);
- timer_sleep(BLINK_ON_TICKS);
- }else if(yval > ThresholdHigh){
- BSP_LED_On(LED3);
- timer_sleep(BLINK_ON_TICKS);
- }else{
- timer_sleep(BLINK_ON_TICKS);
- }
- }
- trace_printf("xval = %d\t", xval);
- trace_printf("yval = %d \n", yval);
- blink_led_off(12);
- blink_led_off(13);
- blink_led_off(14);
- blink_led_off(15);
- }
- void GYRO_MEMS_Test(void)
- {
- trace_printf("\n\n\nGYRO_MEMS_Test\n");
- UserPressButton = 0;
- while(!UserPressButton){
- GYRO_ReadAng();
- }
- }
- void GYRO_ReadAng(void){
- float Buffer[3];
- float Xval, Yval = 0x00;
- BSP_GYRO_GetXYZ(Buffer);
- Xval = abs((Buffer[0]));
- Yval = abs((Buffer[1]));
- if(Xval>Yval){
- if(Buffer[0] > 5000.0f){
- BSP_LED_On(LED5);
- timer_sleep(BLINK_ON_TICKS);
- }
- if(Buffer[0] < -5000.0f){
- BSP_LED_On(LED4);
- timer_sleep(BLINK_ON_TICKS);
- }else{
- timer_sleep(BLINK_ON_TICKS);
- }
- }{
- if(Buffer[1] < -5000.0f){
- BSP_LED_On(LED6);
- timer_sleep(BLINK_ON_TICKS);
- }if(Buffer[1] > 5000.0f){
- BSP_LED_On(LED3);
- timer_sleep(BLINK_ON_TICKS);
- }else{
- timer_sleep(BLINK_ON_TICKS);
- }
- }
- trace_printf("Xval = %g\t", Buffer[0]);
- trace_printf("Yval = %g\n", Buffer[1]);
- blink_led_off(12);
- blink_led_off(13);
- blink_led_off(14);
- blink_led_off(15);
- }
- void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
- if (KEY_BUTTON_PIN == GPIO_Pin){
- while (BSP_PB_GetState(BUTTON_KEY) != RESET);
- UserPressButton = 1;
- }
- }
- #pragma GCC diagnostic pop
- // ----------------------------------------------------------------------------
- /* файл stm32f401_discovery_accelerometer.с */
- uint8_t BSP_ACCELERO_Init(void){
- uint8_t ret = ACCELERO_ERROR;
- uint16_t ctrl = 0x0000;
- ACCELERO_InitTypeDef LSM303DLHC_InitStructure;
- ACCELERO_FilterConfigTypeDef LSM303DLHC_FilterStructure = {0,0,0,0};
- if(Lsm303dlhcDrv.ReadID() == I_AM_LMS303DLHC){
- AccelerometerDrv = &Lsm303dlhcDrv;
- LSM303DLHC_InitStructure.Power_Mode = LSM303DLHC_NORMAL_MODE;
- LSM303DLHC_InitStructure.AccOutput_DataRate = LSM303DLHC_ODR_50_HZ;
- LSM303DLHC_InitStructure.Axes_Enable = LSM303DLHC_AXES_ENABLE;
- LSM303DLHC_InitStructure.AccFull_Scale = LSM303DLHC_FULLSCALE_2G;
- LSM303DLHC_InitStructure.BlockData_Update = LSM303DLHC_BlockUpdate_Continous;
- LSM303DLHC_InitStructure.Endianness = LSM303DLHC_BLE_LSB;
- LSM303DLHC_InitStructure.High_Resolution = LSM303DLHC_HR_ENABLE;
- ctrl |= (LSM303DLHC_InitStructure.Power_Mode | LSM303DLHC_InitStructure.AccOutput_DataRate | \
- LSM303DLHC_InitStructure.Axes_Enable);
- ctrl |= ((LSM303DLHC_InitStructure.BlockData_Update | LSM303DLHC_InitStructure.Endianness | \
- LSM303DLHC_InitStructure.AccFull_Scale | LSM303DLHC_InitStructure.High_Resolution) << 8);
- AccelerometerDrv->Init(ctrl);
- LSM303DLHC_FilterStructure.HighPassFilter_Mode_Selection =LSM303DLHC_HPM_NORMAL_MODE;
- LSM303DLHC_FilterStructure.HighPassFilter_CutOff_Frequency = LSM303DLHC_HPFCF_16;
- LSM303DLHC_FilterStructure.HighPassFilter_AOI1 = LSM303DLHC_HPF_AOI1_DISABLE;
- LSM303DLHC_FilterStructure.HighPassFilter_AOI2 = LSM303DLHC_HPF_AOI2_DISABLE;
- ctrl = (uint8_t) (LSM303DLHC_FilterStructure.HighPassFilter_Mode_Selection |\
- LSM303DLHC_FilterStructure.HighPassFilter_CutOff_Frequency|\
- LSM303DLHC_FilterStructure.HighPassFilter_AOI1|\
- LSM303DLHC_FilterStructure.HighPassFilter_AOI2);
- AccelerometerDrv->FilterConfig(ctrl);
- ret = ACCELERO_OK;
- }
- else{
- ret = ACCELERO_ERROR;
- }
- return ret;
- }
- void BSP_ACCELERO_Reset(void){
- if(AccelerometerDrv->Reset != NULL){
- AccelerometerDrv->Reset();
- }
- }
- void BSP_ACCELERO_Click_ITConfig(void){
- if(AccelerometerDrv->ConfigIT!= NULL){
- AccelerometerDrv->ConfigIT();
- }
- }
- void BSP_ACCELERO_GetXYZ(int16_t *pDataXYZ){
- int16_t SwitchXY = 0;
- if(AccelerometerDrv->GetXYZ!= NULL){
- AccelerometerDrv->GetXYZ(pDataXYZ);
- if(AccelerometerDrv == &Lsm303dlhcDrv){
- SwitchXY = pDataXYZ[0];
- pDataXYZ[0] = pDataXYZ[1];
- pDataXYZ[1] = -SwitchXY;
- }
- }
- }
- /* файл stm32f401_discovery_gyroscope.c */
- uint8_t BSP_GYRO_Init(void){
- uint8_t ret = GYRO_ERROR;
- uint16_t ctrl = 0x0000;
- GYRO_InitTypeDef L3GD20_InitStructure;
- GYRO_FilterConfigTypeDef L3GD20_FilterStructure = {0,0};
- if((L3gd20Drv.ReadID() == I_AM_L3GD20) || (L3gd20Drv.ReadID() == I_AM_L3GD20_TR)){
- GyroscopeDrv = &L3gd20Drv;
- L3GD20_InitStructure.Power_Mode = L3GD20_MODE_ACTIVE;
- L3GD20_InitStructure.Output_DataRate = L3GD20_OUTPUT_DATARATE_1;
- L3GD20_InitStructure.Axes_Enable = L3GD20_AXES_ENABLE;
- L3GD20_InitStructure.Band_Width = L3GD20_BANDWIDTH_4;
- L3GD20_InitStructure.BlockData_Update = L3GD20_BlockDataUpdate_Continous;
- L3GD20_InitStructure.Endianness = L3GD20_BLE_LSB;
- L3GD20_InitStructure.Full_Scale = L3GD20_FULLSCALE_500;
- ctrl = (uint16_t) (L3GD20_InitStructure.Power_Mode | L3GD20_InitStructure.Output_DataRate | \
- L3GD20_InitStructure.Axes_Enable | L3GD20_InitStructure.Band_Width);
- ctrl |= (uint16_t) ((L3GD20_InitStructure.BlockData_Update | L3GD20_InitStructure.Endianness | \
- L3GD20_InitStructure.Full_Scale) << 8);
- GyroscopeDrv->Init(ctrl);
- L3GD20_FilterStructure.HighPassFilter_Mode_Selection =L3GD20_HPM_NORMAL_MODE_RES;
- L3GD20_FilterStructure.HighPassFilter_CutOff_Frequency = L3GD20_HPFCF_0;
- ctrl = (uint8_t) ((L3GD20_FilterStructure.HighPassFilter_Mode_Selection |\
- L3GD20_FilterStructure.HighPassFilter_CutOff_Frequency));
- GyroscopeDrv->FilterConfig(ctrl) ;
- GyroscopeDrv->FilterCmd(L3GD20_HIGHPASSFILTER_ENABLE);
- ret = GYRO_OK;
- }
- return ret;
- }
- uint8_t BSP_GYRO_ReadID(void){
- uint8_t id = 0x00;
- if(GyroscopeDrv->ReadID != NULL){
- id = GyroscopeDrv->ReadID();
- }
- return id;
- }
- void BSP_GYRO_Reset(void){
- if(GyroscopeDrv->Reset != NULL){
- GyroscopeDrv->Reset();
- }
- }
- void BSP_GYRO_ITConfig(GYRO_InterruptConfigTypeDef *pIntConfig){
- uint16_t interruptconfig = 0x0000;
- if(GyroscopeDrv->ConfigIT != NULL){
- interruptconfig |= ((uint8_t)(pIntConfig->Latch_Request| \
- pIntConfig->Interrupt_Axes) << 8);
- interruptconfig |= (uint8_t)(pIntConfig->Interrupt_ActiveEdge);
- GyroscopeDrv->ConfigIT(interruptconfig);
- }
- }
- void BSP_GYRO_EnableIT(uint8_t IntPin){
- if(GyroscopeDrv->EnableIT != NULL){
- GyroscopeDrv->EnableIT(IntPin);
- }
- }
- void BSP_GYRO_DisableIT(uint8_t IntPin){
- if(GyroscopeDrv->DisableIT != NULL){
- GyroscopeDrv->DisableIT(IntPin);
- }
- }
- void BSP_GYRO_GetXYZ(float *pfData){
- if(GyroscopeDrv->GetXYZ!= NULL ){
- GyroscopeDrv->GetXYZ(pfData);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement