【stm32简单外设篇】- 震动传感器
一、适用场景适用场景防盗/防移动报警机箱/设备被碰撞报警、机械振动监测异常振幅提示、敲击触发敲击开关、跌落检测、简单冲击计数、测试台/生产线故障检测、嵌入式中断与 ADC 采样练习。二、器材清单振动传感器 ×1。stm32f103或其它 STM32开发板 ×1若干杜邦线母对母/公对母×1组稳定电源3.3V 或 5V按模块标注×1三、工作原理要点基于弹簧摆动原理设计的震动传感器震动势能传到弹簧末端引起共振左右摆动碰触到金属外壁形成通路。在静止时任何角度都为开路OFF状态输出低电平当受到外力碰撞或者大力晃动时弹簧变形和中心电极接触导通使两个引脚瞬间导通为ON状态当外力消失时电路恢复为开路OFF状态输出高电平。由于导通时间和弹簧的刚性有关所以该震动传感器的输出带宽很窄在读取时建议使用外部中断功能。四、接线示意GND→GNDVCC→5V/3.3V电源标准库DODO→PC1AOAO→PC1HAL库DODO→PA0AOAO→PA0五、示例代码标准库DO#include stm32f10x.h #include stdio.h #include bsp_SysTick.h #include bsp_usart.h void gpio_init() { GPIO_InitTypeDef PC; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //振感 PC.GPIO_Pin GPIO_Pin_1; PC.GPIO_Mode GPIO_Mode_IPD; GPIO_Init(GPIOC,PC); } int main(void) { SysTick_Init(); //延时函数初始化 gpio_init(); //初始化与LED连接的硬件接口 USART_Config(); while(1) { if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) 0) { Usart_SendString(USART1,振动\n); }else { Usart_SendString(USART1,静止\n); } Delay_us(500000); } }AO#include breathing.h #include stm32f10x.h #include stdio.h #include bsp_usart.h char showlight[20]; extern volatile uint16_t adc_light; void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 //定时器TIM3初始化 TIM_TimeBaseStructure.TIM_Period arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision TIM_CKD_DIV1; //设置时钟分割:TDTS Tck_tim TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; //TIM向上计数模式即从0开始向上数到越界 TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 //中断优先级NVIC设置 NVIC_InitStructure.NVIC_IRQChannel TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd ENABLE; //IRQ通道被使能 NVIC_Init(NVIC_InitStructure); //初始化NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx } void TIM3_IRQHandler(void) { uint16_t value; value (adc_light)/74; if(TIM_GetITStatus(TIM3,TIM_IT_Update) SET) { sprintf(showlight,light:%d,value:%d\n,adc_light,value); Usart_SendString(USART1,showlight); } TIM_ClearITPendingBit(TIM3,TIM_IT_Update); } #include adc_time.h #include stm32f10x.h volatile uint16_t adc_light; void adcgpio_init() { GPIO_InitTypeDef PC; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); PC.GPIO_Pin GPIO_Pin_1; PC.GPIO_Mode GPIO_Mode_AIN; GPIO_Init(GPIOC,PC); } void adcmode_init() { ADC_InitTypeDef adc; NVIC_InitTypeDef nvic; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2,ENABLE); adc.ADC_ModeADC_Mode_Independent; adc.ADC_ScanConvMode DISABLE; adc.ADC_ContinuousConvMode ENABLE; adc.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; adc.ADC_DataAlign ADC_DataAlign_Right; adc.ADC_NbrOfChannel 1; ADC_Init(ADC2,adc); RCC_ADCCLKConfig(RCC_PCLK2_Div8); ADC_RegularChannelConfig(ADC2,ADC_Channel_11,1,ADC_SampleTime_55Cycles5); ADC_ITConfig(ADC2,ADC_IT_EOC,ENABLE); ADC_Cmd(ADC2,ENABLE); ADC_ResetCalibration(ADC2); while(ADC_GetResetCalibrationStatus(ADC2)); ADC_StartCalibration(ADC2); while(ADC_GetCalibrationStatus(ADC2)); ADC_SoftwareStartConvCmd(ADC2,ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); nvic.NVIC_IRQChannel ADC1_2_IRQn; nvic.NVIC_IRQChannelPreemptionPriority 3; nvic.NVIC_IRQChannelSubPriority 0; nvic.NVIC_IRQChannelCmd ENABLE; NVIC_Init(nvic); } void adctime_Init() { adcgpio_init(); adcmode_init(); } void ADC1_2_IRQHandler(void) { if(ADC_GetITStatus(ADC2,ADC_IT_EOC) SET) { adc_light ADC_GetConversionValue(ADC2); } ADC_ClearITPendingBit(ADC2,ADC_IT_EOC); } #include stm32f10x.h #include stdio.h #include bsp_SysTick.h #include adc_time.h #include breathing.h #include bsp_usart.h int main() { SysTick_Init(); TIM3_Init(); USART_Config(); adctime_Init(); TIM3_Int_Init(4999,7199); //定时500ms while(1) { } // return 0; }HAL库DOint main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) 1) HAL_UART_Transmit(huart1,无震动\r\n, strlen(无震动\r\n), HAL_MAX_DELAY); else HAL_UART_Transmit(huart1,有震动\r\n, strlen(有震动\r\n), HAL_MAX_DELAY); HAL_Delay(1000); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }AOint main(void) { /* USER CODE BEGIN 1 */ char show[20]{0}; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_ADC1_Init(); MX_USART1_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { //#1。启动常规序列 HAL_ADC_Start(hadc1); //#2.等待转换完成 HAL_ADC_PollForConversion(hadc1,HAL_MAX_DELAY); //#3。获取结果 uint32_t dr HAL_ADC_GetValue(hadc1); //#4.把结果转换成电压 float voltage dr *(3.3f-0.0f)/4095.0f; sprintf(show,adc:%d,%.2f\n,dr,voltage); HAL_UART_Transmit(huart1,show,strlen(show),HAL_MAX_DELAY); HAL_Delay(500); // ifvoltage1.5f//光线暗 // HAL_GPIO_WritePin(GPIOA,GPIO_PIN_13,GPIO_PIN_SET);// 灭灯 // else//光线亮 // HAL_GPIO_WritePinGPIOA,GPIO_PIN_13GPIO_PIN_RESET); // 亮灯 /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ }六、讲解视频https://www.bilibili.com/video/BV1ciNKzDEBi/?spm_id_from333.1387.homepage.video_card.clickvd_sourceb035825fef3be39bc47a9c50b324d086https://www.bilibili.com/video/BV1z4NuzWEbP/?spm_id_from333.1387.homepage.video_card.clickvd_sourceb035825fef3be39bc47a9c50b324d086https://www.bilibili.com/video/BV1t4NMzvEjZ/?spm_id_from333.1387.homepage.video_card.clickvd_sourceb035825fef3be39bc47a9c50b324d086
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2413169.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!