Advertisement
Guest User

STM32F4

a guest
May 6th, 2015
311
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.74 KB | None | 0 0
  1. int main (void) {  
  2.     /* Initialize system */
  3.     SystemInit();
  4.    
  5.     /* Initialize USART1, 9600baud, TX: PB6 */
  6.     TM_USART_Init(USART1, TM_USART_PinsPack_2, 9600);
  7.    
  8.     /* Initialize delay */
  9.     TM_DELAY_Init();
  10.    
  11.     /* MOTOR 1, TIM3, Channel 1, Pinspack 1 = PA6 */
  12.     TM_SERVO_Init(&Motor1, TIM3, TM_PWM_Channel_1, TM_PWM_PinsPack_1);
  13.     /* MOTOR 1, TIM3, Channel 2, Pinspack 1 = PA7 */
  14.     TM_SERVO_Init(&Motor2, TIM3, TM_PWM_Channel_2, TM_PWM_PinsPack_1);
  15.     /* MOTOR 1, TIM3, Channel 3, Pinspack 1 = PB0 */
  16.     TM_SERVO_Init(&Motor3, TIM3, TM_PWM_Channel_3, TM_PWM_PinsPack_1);
  17.     /* MOTOR 1, TIM3, Channel 4, Pinspack 1 = PB1 */
  18.     TM_SERVO_Init(&Motor4, TIM3, TM_PWM_Channel_4, TM_PWM_PinsPack_1);
  19.  
  20. //      - TM_I2C_Pinspack_2:
  21. //      - I2C1: SCL: PB8, SDA: PB9
  22.     TM_I2C_Init(I2C1, TM_I2C_PinsPack_2, 400000);
  23.        
  24.     TM_MPU6050_Init(&MPU6050_Data1, TM_MPU6050_Device_1, TM_MPU6050_Accelerometer_8G, TM_MPU6050_Gyroscope_250s);
  25.        
  26.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  27.  
  28.     Initiate_Tim4();
  29.     M_WATCHDOG_Init(TM_WATCHDOG_Timeout_1s);
  30.     while (1)
  31.     {  
  32.          TM_WATCHDOG_Reset();
  33.     }
  34. }
  35.  
  36.  
  37. void Initiate_Tim4(void) {
  38.     TIM_TimeBaseInitTypeDef TIM_BaseStruct;
  39.     NVIC_InitTypeDef NVIC_InitStructure;
  40.     NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  41.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  42.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  43.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  44.     NVIC_Init(&NVIC_InitStructure);
  45.    
  46.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  47.     TIM_BaseStruct.TIM_Prescaler = 8399;
  48.     TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
  49.  
  50.     TIM_BaseStruct.TIM_Period = 999; /* 100 ms */
  51.     TIM_BaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  52.     TIM_BaseStruct.TIM_RepetitionCounter = 0;
  53.     TIM_TimeBaseInit(TIM4, &TIM_BaseStruct);
  54.  
  55.     TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
  56.        
  57.     TIM_Cmd(TIM4, ENABLE);
  58. }
  59.  
  60. void TIM4_IRQHandler(void)
  61. {
  62.     if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
  63.     {
  64.         TIM_ClearITPendingBit(TIM4,TIM_IT_Update);
  65.         readMPU();
  66.         }
  67. }
  68.  
  69. void readMPU()
  70. {
  71.     TM_MPU6050_ReadAll(&MPU6050_Data1);
  72.    
  73.     accX =  MPU6050_Data1.Accelerometer_X / 182.0;
  74.     accY =  MPU6050_Data1.Accelerometer_Y / 182.0;
  75.     accZ =  MPU6050_Data1.Accelerometer_Z / 182.0;
  76.                                
  77.     gyroX =  MPU6050_Data1.Gyroscope_X / 131.0;
  78.     gyroY =  MPU6050_Data1.Gyroscope_Y / 131.0;
  79.     gyroZ =  MPU6050_Data1.Gyroscope_Z / 131.0;
  80.    
  81.     roll  = atan2(accY, accZ) * RAD_TO_DEG;
  82.     pitch = atan(-accX / sqrt(accY * accY + accZ * accZ)) * RAD_TO_DEG;
  83. }
  84.  
  85.  
  86. //in defines.h
  87.  
  88. #define MPU6050_I2C            I2C2
  89. #define MPU6050_I2C_PINSPACK    TM_I2C_PinsPack_1
  90.  
  91. #define TM_USART1_USE_CUSTOM_IRQ
  92. #define TM_USART_NVIC_PRIORITY 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement