1 2
| #include <stdio.h>
#include "stm32f1xx_hal.h"
#include "stm32f1xx_hal_uart.h"
#include "stm32f1xx_hal_tim.h" void SystemClock_Config(void);
static void Error_Handler(void);
static void MX_GPIO_Init(void);
static void MX_TIM3_Init(void);
UART_HandleTypeDef UartHandler;
TIM_HandleTypeDef TIM_Handler;
int pa12_interrupt_flag;
int timer_flag;
int counter=0;
int timer_counter=0;
int mode=0;
int state1;
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_TIM3_Init();
MX_GPIO_Init();
HAL_TIM_Base_Start_IT(&TIM_Handler);
UartHandler.Instance = USART1;
UartHandler.Init.BaudRate = 9600;
UartHandler.Init.WordLength = UART_WORDLENGTH_8B;
UartHandler.Init.StopBits = UART_STOPBITS_1;
UartHandler.Init.Parity = UART_PARITY_NONE;
UartHandler.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandler.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&UartHandler);
HAL_Delay(100);
printf("Hello\r\n");
int flag = 0;
HAL_SuspendTick();
while (1) {
state1 = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
if(state1==0)
mode = ~mode;
}
}
int __io_putchar(uint8_t ch){
HAL_UART_Transmit(&UartHandler, &ch, 1, 100);
return 1;
}
int fputc(int ch, FILE *f){
uint8_t chr =ch;
HAL_UART_Transmit(&UartHandler, &chr, 1, 100);
return 1;
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
if(htim->Instance == TIM3){
timer_flag = 1;
timer_counter++;
}
if (mode)
printf("speed=%lf\r\n", counter*1.0/timer_counter);
else
printf("distance=%d\r\n", counter);
}
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
switch (GPIO_Pin){
case GPIO_PIN_11:
printf("Pressed\r\n");
mode=!mode;
break;
case GPIO_PIN_12:
counter++;
break;
}
}
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
}
void MX_TIM3_Init(void)
{
TIM_ClockConfigTypeDef sClockSourceConfig;
TIM_MasterConfigTypeDef sMasterConfig;
TIM_Handler.Instance = TIM3;
TIM_Handler.Init.Prescaler = 8000;
TIM_Handler.Init.CounterMode = TIM_COUNTERMODE_UP;
TIM_Handler.Init.Period = 199;
TIM_Handler.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&TIM_Handler);
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
HAL_TIM_ConfigClockSource(&TIM_Handler, &sClockSourceConfig);
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
HAL_TIMEx_MasterConfigSynchronization(&TIM_Handler, &sMasterConfig);
}
void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
__GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
}
#endif
|