m0_73643597 2023-03-21 11:27 采纳率: 0%
浏览 21

32座椅 压力检测系统


#include "stm32f10x.h" 
#include "stm32f10x_gpio.h"
 #include "stm32f10x_rcc.h" 
#include "stm32f10x_usart.h"
 #include "stm32f10x_adc.h"
 #include "stm32f10x_tim.h"
 #define TIMEOUT_VALUE 60000 // 无人超时时间,单位为毫秒
 GPIO_InitTypeDef GPIO_InitStructure; 
USART_InitTypeDef USART_InitStructure; 
ADC_InitTypeDef ADC_InitStructure; 
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 
uint16_t ADC_ConvertedValue = 0;
 uint16_t last_time = 0; 
void GPIO_Configuration(void);
void USART_Configuration(void); 
void ADC_Configuration(void); 
void TIM_Configuration(void); 
void delay_us(uint32_t n);
 void send_bluetooth_msg(void);
 int main(void) { // 初始化GPIO、USART、ADC和TIM模块 
GPIO_Configuration(); 
USART_Configuration(); 
ADC_Configuration(); 
TIM_Configuration(); // 使能USART模块和ADC模块
 USART_Cmd(USART1, ENABLE); 
ADC_SoftwareStartConvCmd(ADC1, ENABLE); 
while (1) { if (ADC_ConvertedValue > 100) { 
// 有人坐在座位上
 last_time = 0; 
// 记录最后一次检测到有人时的时间 
} else {
 // 没有人坐在座位上
 if (last_time == 0) { last_time = TIM_GetCounter(TIM3);
 // 如果上一次检测到有人,则重新记录最后一次检测到有人时 } 
else { uint16_t current_time = TIM_GetCounter(TIM3); 
if (current_time - last_time > TIMEOUT_VALUE) {
 // 超时,通过蓝牙发送信息 

send_bluetooth_msg();
 // 发送蓝牙信息 
break; } } ADC_ConvertedValue = 0; // 清除ADC转换值,以便下次采样


 } } } // 配置GPIO模块
 void GPIO_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // 
USART1_TX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; 
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOA, &GPIO_InitStructure); 
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // 
USART1_RX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; // 
ADC1_IN1 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 
GPIO_Init(GPIOA, &GPIO_InitStructure); } // 配置USART模块
 void USART_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
 USART_InitStructure.USART_BaudRate = 9600;
 USART_InitStructure.USART_WordLength = USART_WordLength_8b; 
USART_InitStructure.USART_StopBits = USART_StopBits_1;
 USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; 
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); } // 配置ADC模块 
void ADC_Configuration(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_239Cycles5); ADC_Cmd(ADC1, ENABLE);
 // 配置ADC中断优先级和使能ADC中断
 NVIC_InitTypeDef NVIC_InitStructure;
 NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE); } // 配置TIM模块 
void TIM_Configuration(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_DeInit(TIM3); TIM_TimeBaseStructure.TIM_Period = 0xffff; TIM_TimeBaseStructure.TIM_Prescaler = 71; TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_Cmd(TIM3, ENABLE); } // 延时函数,延时时间为n微秒 
void delay_us(uint32_t n) { volatile uint32_t i = 0; for (i = 0; i < n * 8; i++); } // 发送蓝牙信息 
void send_bluetooth_msg(void) { USART_SendData(USART1, 'T'); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); USART_SendData(USART1, 'i'); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); USART_SendData(USART1, 'm'); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); USART_SendData(USART1, 'e'); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); USART_SendData(USART1, 'o'); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } // ADC中断服务函数,获取ADC转换值 
void ADC1_2_IRQHandler(void) { if (ADC_GetITStatus(ADC1, ADC_IT_EOC) != RESET) { ADC_ConvertedValue = ADC_GetConversionValue(ADC1); ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); } }


  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-03-21 21:17
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 请详细说明问题背景 3月21日
  • 修改了问题 3月21日
  • 修改了问题 3月21日
  • 创建了问题 3月21日

悬赏问题

  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表