什么叫慢阻肺| 五月十二是什么星座| 吃什么对头发好| 高考推迟月经吃什么药| 腿浮肿是什么原因引起的| 什么锅好| 蜘蛛痣是什么原因引起的| 军绿色是什么颜色| 为什么会长黑痣| 肺不张是什么意思| 土方是什么| 教师节应该送老师什么花| 独一无二指什么生肖| 十一月二十六是什么星座| 我国计划生育什么时候开始| 为什么可乐能溶解鱼刺| 一个兹一个子念什么| 荨麻疹有什么忌口吗| 流金岁月什么意思| 糖尿病是什么| 女生被口是什么感觉| 肝岛是什么意思| 24是什么生肖| 99年的兔是什么命| 椰果是什么做的| 梦到拆房子是什么意思| 痛经什么原因引起的| 防晒霜什么牌子好| 大米放什么不生虫子| 牙髓是什么| 心有灵犀是什么意思| 兮兮是什么意思| dan是什么单位| 马后炮是什么意思| 什么叫环比什么叫同比| 拉水便吃什么药| 夕阳什么意思| 心心相惜是什么意思| 囊肿是什么东西| 不安腿综合征吃什么药| 甲状腺结节什么原因引起的| 窥视是什么意思| 6月13日什么星座| 为什么怀孕会孕酮低| 75属什么生肖| 梦见插秧是什么意思| 杭州灵隐寺求什么最灵| 人的三观是什么| 心慌是什么症状| 贫嘴是什么意思| 梦见仙鹤是什么意思| 陈皮是什么皮做的| 什么是韧性| 1953年属蛇的是什么命| 风象星座是什么意思| 舌头发麻是什么原因引起的| 2月2号是什么星座| 为什么会突然耳鸣| 蓝眼睛的猫是什么品种| ysl是什么品牌| 夹页念什么| 短发女人吸引什么男人| 什么时候阅兵| 高考考生号是什么| 啤酒加味精有什么作用| 反流性食管炎是什么症状| 三板斧是什么意思| 梦见自己梳头发是什么意思| 地铁和高铁有什么区别| 隐血弱阳性是什么意思| 果肉属于什么组织| 眼压高什么症状| au750是什么意思| 仰卧是什么姿势| ca724是什么意思| 奇妙是什么意思| 郭字五行属什么| 做梦梦见地震是什么意思| 鸩杀是什么意思| 引体向上练什么肌肉| 乔丹是什么品牌| 梦到女儿丢了什么预兆| 青梅竹马什么意思| 胃痛吃什么药最有效| 孕妇耻骨疼是什么原因| 夏天煲鸡汤放什么材料| 肾结石看病挂什么科室| 器质性是什么意思| 梦游为什么不能叫醒| 吃什么保肝护肝| 腮腺炎看什么科室| 5月13日什么星座| 头晕是什么感觉| 教育局局长是什么级别| 什么症状吃肝胃气痛片| 做腹部彩超挂什么科| 栀子泡水喝有什么功效| 睡觉起来嘴巴苦是什么原因| 促甲状腺激素低是什么原因| 料酒可以用什么代替| 什么是舒张压和收缩压| 今年78岁属什么生肖| 马来西亚人为什么会说中文| n2o是什么气体| 垫底是什么意思| 纪委书记是什么级别| 北上广是什么意思| 阴道炎有些什么症状| 未属什么五行| 糖类抗原ca199偏高是什么原因| 咽喉炎挂什么科| 舌头烧灼感是什么原因| 白虎痣是什么意思| 什么是白肺| 后背痛什么原因| 看胃病挂什么科| 青少年膝盖痛什么原因| cpr什么意思| 乳果糖是什么| 冬至穿什么衣服| 喝酒前吃什么不会醉| 胃结石有什么症状表现| 欲望什么意思| 睡觉时身体抽搐是什么原因| 股癣用什么药膏最好| 为什么痛经| 算了是什么意思| 明年属什么生肖| 客套是什么意思| 骨折用什么药恢复快| 赛马不相马什么意思| 碱中毒是什么引起的| 考护师需要什么条件| 世界七大奇迹分别是什么| 尿道感染要吃什么药才能快速治好| 痔核是什么| 大便干结吃什么药| 蚊子讨厌什么气味| a和b生的孩子是什么血型| 2007年五行属什么| 什么是c刊| 喜筵和喜宴是什么意思| 西字里面加一横是什么字| 血压和血糖有什么关系| 酒后头疼吃什么| nk细胞是什么| aqua是什么牌子| 空杯是什么意思| 7.17什么星座| 余事勿取是什么意思| 权志龙为什么这么火| 什么是辅警| 血虚吃什么食物可以补| 血脂高是什么意思| 结石有什么症状| 去医院测血糖挂什么科| 白咖啡是什么| 兰台是什么意思| 炖牛肉放什么料| 吃阿胶有什么好处| 洗牙有什么好处和坏处| mri是什么| 断子绝孙是什么意思| 感谢老师送什么花| 阿昔洛韦片治什么病| 男人下巴有痣代表什么| 美的是做什么起家的| 三亚免税店什么最便宜| 嫉妒是什么意思| 右肩膀疼痛预示什么病| 舌苔发苦是什么原因| 肚脐右边疼是什么原因| lop胎位是什么意思| 438是什么意思| bb粥指的是什么意思| 精子是什么样的| 皮肤发黑是什么原因引起的| 小丑代表什么生肖| 什么的愿望| 鸽子和什么一起炖汤最有营养| 喝什么茶减肥最有效| 左手大拇指抖动是什么原因| 当演员有什么要求| b端和c端是什么意思| 脂溢性皮炎是什么引起的| 室缺是什么意思| 老克勒是什么意思| 什么是翻墙软件| 蒜苔炒什么好吃| 后顶焦度是什么意思| 7点至9点是什么时辰| 对峙什么意思| 丰衣足食是什么意思| 沈阳六院主要治什么病| 日月星辰下一句是什么| 什么叫丹凤眼| 前列腺炎有什么征兆| 风热感冒和风寒感冒有什么区别| 右手中指发麻是什么原因| 上海副市长什么级别| 交媾是什么意思| 4月4日什么星座| 下眼睑肿胀是什么原因| 西洋参有什么用| 粉底液是干什么用的| 梦见和死去的人说话是什么意思| 农历七月初六是什么星座| 椎间盘膨出是什么意思| 什么是二型糖尿病| 减肥吃什么油| 眼睛长黄斑是什么原因| 肝脏钙化灶什么意思| 字义是什么意思| 男性尿分叉是什么原因| pre是什么的缩写| 一天中什么时候最热| 什么药消肿最快最有效| 什么治咳嗽最快最有效| 黑茶金花是什么菌| 吃什么食物养胃| 甲状腺什么原因引起的| 喉咙痛喝什么饮料| 脂肪滴是什么意思| 7月8号是什么星座| 荔枝补什么| 什么屎不臭答案| 斐乐什么档次| 2月1日是什么星座| 一直打哈欠是什么原因| 肾构错瘤要注意什么| 连续放屁是什么原因呢| 69属什么| 乜是什么意思| 什么原因会导致尿路感染| 伍德氏灯检查什么| 吃什么水果补肝养肝最有效| 双肺多发结节是什么意思| 一月二十五号是什么星座| 猫怕什么气味| 阮小五的绰号是什么| 14年属什么生肖| 为什么叫211大学| 老蜜蜡什么颜色最好| 天蝎属于什么象星座| 九牛一毛是什么意思| 口苦口臭吃什么药效果最佳| 马来玉是什么玉| 4月23日什么星座| 中签是什么意思| 没经验开什么店最简单| 劫富济贫是什么意思| 六子是什么意思| 高血压是什么原因引起的| 血小板是什么| 重庆什么时候解放的| 派出所传唤是什么意思| 易孕体质是什么意思| 九出十三归指什么生肖| 肠炎吃什么药效果好| 打呼噜的原因是什么| 直肠ca代表什么病| 血小板为什么会高| 哮喘吃什么药管用| 喜欢趴着睡是什么原因| 百度
这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 ? 论坛首页 ? 活动中心 ? 板卡试用 ? 跳动的心之二——照猫画虎编程序

共5条 1/1 1 跳转至

跳动的心之二——照猫画虎编程序

高工
2025-08-05 18:48:51     打赏
百度 而在核心区停车秩序整治方面,将开展二环路内静态交通秩序专项治理工作,10月底前,抓紧组建静态停车秩序管理专业执法队伍,提高巡查频率和强度,实现路侧停车网格化巡查管理,加大执法力度。

在一开始的尝试后,我开始了正式的编程,首先从STM32CubeMX开始,一点开,emmm,跟教程里原来的界面有些不一样了。

1537253110317089.png

以前的界面。

image.png

现在的界面。这一升级,又得重新熟悉界面了。

升级后界面不太一样,那我就用新版的来讲解一下吧。

image.png

首先还是先选板子。

image.png

选择默认模式初始化所有外设

image.png

选择项目管理进行配置。

image.png

image.png

外设配置。配置ADC1。

image.png

配置TIM5。

image.png

配置TIM9。

image.png

最后,点击这里生成工程代码。

image.png

打开工程后,我把所有代码全加了进去。

/* Includes ------------------------------------------------------------------*/

#include "main.h"

#include "stm32f4xx_hal.h"

/* Private includes ----------------------------------------------------------*/

/* USER CODE BEGIN Includes */

// these variables are volatile because they are used during the interrupt service routine!


#define true 1

#define false 0

int BPM;                   // used to hold the pulse rate

int Signal;                // holds the incoming raw data

int IBI = 600;             // holds the time between beats, must be seeded!

unsigned char Pulse = false;     // true when pulse wave is high, false when it's low

unsigned char QS = false;        // becomes true when Arduoino finds a beat.

int rate[10];                    // array to hold last ten IBI values

unsigned long sampleCounter = 0;          // used to determine pulse timing

unsigned long lastBeatTime = 0;           // used to find IBI

int P =512;                      // used to find peak in pulse wave, seeded

int T = 512;                     // used to find trough in pulse wave, seeded

int thresh = 512;                // used to find instant moment of heart beat, seeded

int amp = 100;                   // used to hold amplitude of pulse waveform, seeded

int Num;

int num;

unsigned char firstBeat = true;     // used to seed rate array so we startup with reasonableBPM

unsigned char secondBeat = false;  // used to seed rate array so we startup with reasonableBPM

/* USER CODE END Includes */


/* Private typedef -----------------------------------------------------------*/

/* USER CODE BEGIN PTD */


/* USER CODE END PTD */


/* Private define ------------------------------------------------------------*/

/* USER CODE BEGIN PD */


/* USER CODE END PD */


/* Private macro -------------------------------------------------------------*/

/* USER CODE BEGIN PM */


/* USER CODE END PM */


/* Private variables ---------------------------------------------------------*/

ADC_HandleTypeDef hadc1;


TIM_HandleTypeDef htim5;

TIM_HandleTypeDef htim9;


UART_HandleTypeDef huart2;


/* USER CODE BEGIN PV */


/* USER CODE END PV */


/* Private function prototypes -----------------------------------------------*/

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_USART2_UART_Init(void);

static void MX_ADC1_Init(void);

static void MX_TIM5_Init(void);

static void MX_TIM9_Init(void);

/* USER CODE BEGIN PFP */


/* USER CODE END PFP */


/* Private user code ---------------------------------------------------------*/

/* USER CODE BEGIN 0 */

void user_pwm_setvalue(uint16_t value)

{

  TIM_OC_InitTypeDef sConfigOC;

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

  sConfigOC.Pulse = value;

  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

  HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_1);

  HAL_TIM_PWM_Start(&htim5, TIM_CHANNEL_1);  

 }

/* USER CODE END 0 */


/**

  * @brief  The application entry point.

  * @retval int

  */

int 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_USART2_UART_Init();

  MX_ADC1_Init();

  MX_TIM5_Init();

  MX_TIM9_Init();

  /* USER CODE BEGIN 2 */


  /* USER CODE END 2 */


  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */

for(num=0;num<BPM;num++)

{

user_pwm_setvalue(num);

HAL_Delay(12);

}

for(num=0;num<BPM;num++)

{

user_pwm_setvalue(BPM-num);

HAL_Delay(20);

}

    /* USER CODE BEGIN 3 */

  }

  /* USER CODE END 3 */

}


/**

  * @brief System Clock Configuration

  * @retval None

  */

void SystemClock_Config(void)

{

  RCC_OscInitTypeDef RCC_OscInitStruct = {0};

  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};


  /**Configure the main internal regulator output voltage 

  */

  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  /**Initializes the CPU, AHB and APB busses clocks 

  */

  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

  RCC_OscInitStruct.HSIState = RCC_HSI_ON;

  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;

  RCC_OscInitStruct.PLL.PLLM = 16;

  RCC_OscInitStruct.PLL.PLLN = 336;

  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;

  RCC_OscInitStruct.PLL.PLLQ = 4;

  RCC_OscInitStruct.PLL.PLLR = 2;

  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

  {

    Error_Handler();

  }

  /**Initializes the CPU, AHB and APB busses clocks 

  */

  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK

                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;

  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;

  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;

  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;


  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)

  {

    Error_Handler();

  }

}


void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

unsigned int runningTotal;

if(htim->Instance==htim9.Instance)

{

Signal=HAL_ADC_GetValue(&hadc1); // read the Pulse Senso

sampleCounter += 2;                         // keep track of the time in mS with this variable

Num = sampleCounter - lastBeatTime;       // monitor the time since the last beat to avoid noise

HAL_ADC_Start(&hadc1); //restart ADC conversion

//  find the peak and trough of the pulse wave

  if(Signal < thresh && Num > (IBI/5)*3){       // avoid dichrotic noise by waiting 3/5 of last IBI

    if (Signal < T){                        // T is the trough

      T = Signal;                         // keep track of lowest point in pulse wave

    }

  }

  if(Signal > thresh && Signal > P){          // thresh condition helps avoid noise

    P = Signal;                             // P is the peak

  }                                        // keep track of highest point in pulse wave

  //  NOW IT'S TIME TO LOOK FOR THE HEART BEAT

  // signal surges up in value every time there is a pulse

  if (Num > 250){                                   // avoid high frequency noise

    if ( (Signal > thresh) && (Pulse == false) && (Num > (IBI/5)*3) ){        

      Pulse = true;                               // set the Pulse flag when we think there is a pulse

      HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_SET);                // turn on pin 13 LED

      IBI = sampleCounter - lastBeatTime;         // measure time between beats in mS

      lastBeatTime = sampleCounter;               // keep track of time for next pulse

      if(secondBeat){                        // if this is the second beat, if secondBeat == TRUE

        secondBeat = false;                  // clear secondBeat flag

        for(int i=0; i<=9; i++){             // seed the running total to get a realisitic BPM at startup

          rate[i] = IBI;                      

        }

      }

      if(firstBeat){                         // if it's the first time we found a beat, if firstBeat == TRUE

        firstBeat = false;                   // clear firstBeat flag

        secondBeat = true;                   // set the second beat flag

 //       sei();                               // enable interrupts again

        return;                              // IBI value is unreliable so discard it

      }   

      // keep a running total of the last 10 IBI values

      runningTotal = 0;                  // clear the runningTotal variable    

      for(int i=0; i<=8; i++){                // shift data in the rate array

        rate[i] = rate[i+1];                  // and drop the oldest IBI value

        runningTotal += rate[i];              // add up the 9 oldest IBI values

      }

      rate[9] = IBI;                          // add the latest IBI to the rate array

      runningTotal += rate[9];                // add the latest IBI to runningTotal

      runningTotal /= 10;                     // average the last 10 IBI values

      BPM = 60000/runningTotal;       // how many beats can fit into a minute? that's BPM!

      QS = true;                              // set Quantified Self flag

      // QS FLAG IS NOT CLEARED INSIDE THIS ISR

    }                       

  }

  if (Signal < thresh && Pulse == true){   // when the values are going down, the beat is over

    HAL_GPIO_WritePin(GPIOA,GPIO_PIN_5,GPIO_PIN_RESET);        // turn off pin 13 LED

    Pulse = false;                         // reset the Pulse flag so we can do it again

    amp = P - T;                           // get amplitude of the pulse wave

    thresh = amp/2 + T;                    // set thresh at 50% of the amplitude

    P = thresh;                            // reset these for next time

    T = thresh;

  }

  if (Num > 2500){                           // if 2.5 seconds go by without a beat

    thresh = 512;                          // set thresh default

    P = 512;                               // set P default

    T = 512;                               // set T default

    lastBeatTime = sampleCounter;          // bring the lastBeatTime up to date        

    firstBeat = true;                      // set these to avoid noise

    secondBeat = false;                    // when we get the heartbeat back

  }

}

}

/**

  * @brief ADC1 Initialization Function

  * @param None

  * @retval None

  */

static void MX_ADC1_Init(void)

{


  /* USER CODE BEGIN ADC1_Init 0 */


  /* USER CODE END ADC1_Init 0 */


  ADC_ChannelConfTypeDef sConfig = {0};


  /* USER CODE BEGIN ADC1_Init 1 */


  /* USER CODE END ADC1_Init 1 */

  /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) 

  */

  hadc1.Instance = ADC1;

  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;

  hadc1.Init.Resolution = ADC_RESOLUTION_12B;

  hadc1.Init.ScanConvMode = DISABLE;

  hadc1.Init.ContinuousConvMode = DISABLE;

  hadc1.Init.DiscontinuousConvMode = DISABLE;

  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;

  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;

  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;

  hadc1.Init.NbrOfConversion = 1;

  hadc1.Init.DMAContinuousRequests = DISABLE;

  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;

  if (HAL_ADC_Init(&hadc1) != HAL_OK)

  {

    Error_Handler();

  }

  /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. 

  */

  sConfig.Channel = ADC_CHANNEL_6;

  sConfig.Rank = 1;

  sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;

  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)

  {

    Error_Handler();

  }

  /* USER CODE BEGIN ADC1_Init 2 */


  /* USER CODE END ADC1_Init 2 */


}


/**

  * @brief TIM5 Initialization Function

  * @param None

  * @retval None

  */

static void MX_TIM5_Init(void)

{


  /* USER CODE BEGIN TIM5_Init 0 */


  /* USER CODE END TIM5_Init 0 */


  TIM_ClockConfigTypeDef sClockSourceConfig = {0};

  TIM_MasterConfigTypeDef sMasterConfig = {0};

  TIM_OC_InitTypeDef sConfigOC = {0};


  /* USER CODE BEGIN TIM5_Init 1 */


  /* USER CODE END TIM5_Init 1 */

  htim5.Instance = TIM5;

  htim5.Init.Prescaler = 50;

  htim5.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim5.Init.Period = 1999;

  htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  if (HAL_TIM_Base_Init(&htim5) != HAL_OK)

  {

    Error_Handler();

  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)

  {

    Error_Handler();

  }

  if (HAL_TIM_PWM_Init(&htim5) != HAL_OK)

  {

    Error_Handler();

  }

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;

  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)

  {

    Error_Handler();

  }

  sConfigOC.OCMode = TIM_OCMODE_PWM1;

  sConfigOC.Pulse = 0;

  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;

  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;

  if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)

  {

    Error_Handler();

  }

  /* USER CODE BEGIN TIM5_Init 2 */


  /* USER CODE END TIM5_Init 2 */

  HAL_TIM_MspPostInit(&htim5);


}


/**

  * @brief TIM9 Initialization Function

  * @param None

  * @retval None

  */

static void MX_TIM9_Init(void)

{


  /* USER CODE BEGIN TIM9_Init 0 */


  /* USER CODE END TIM9_Init 0 */


  TIM_ClockConfigTypeDef sClockSourceConfig = {0};


  /* USER CODE BEGIN TIM9_Init 1 */


  /* USER CODE END TIM9_Init 1 */

  htim9.Instance = TIM9;

  htim9.Init.Prescaler = 100;

  htim9.Init.CounterMode = TIM_COUNTERMODE_UP;

  htim9.Init.Period = 0;

  htim9.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;

  if (HAL_TIM_Base_Init(&htim9) != HAL_OK)

  {

    Error_Handler();

  }

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;

  if (HAL_TIM_ConfigClockSource(&htim9, &sClockSourceConfig) != HAL_OK)

  {

    Error_Handler();

  }

  /* USER CODE BEGIN TIM9_Init 2 */


  /* USER CODE END TIM9_Init 2 */


}


/**

  * @brief USART2 Initialization Function

  * @param None

  * @retval None

  */

static void MX_USART2_UART_Init(void)

{


  /* USER CODE BEGIN USART2_Init 0 */


  /* USER CODE END USART2_Init 0 */


  /* USER CODE BEGIN USART2_Init 1 */


  /* USER CODE END USART2_Init 1 */

  huart2.Instance = USART2;

  huart2.Init.BaudRate = 115200;

  huart2.Init.WordLength = UART_WORDLENGTH_8B;

  huart2.Init.StopBits = UART_STOPBITS_1;

  huart2.Init.Parity = UART_PARITY_NONE;

  huart2.Init.Mode = UART_MODE_TX_RX;

  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;

  huart2.Init.OverSampling = UART_OVERSAMPLING_16;

  if (HAL_UART_Init(&huart2) != HAL_OK)

  {

    Error_Handler();

  }

  /* USER CODE BEGIN USART2_Init 2 */


  /* USER CODE END USART2_Init 2 */


}


/**

  * @brief GPIO Initialization Function

  * @param None

  * @retval None

  */

static void MX_GPIO_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStruct = {0};


  /* GPIO Ports Clock Enable */

  __HAL_RCC_GPIOC_CLK_ENABLE();

  __HAL_RCC_GPIOH_CLK_ENABLE();

  __HAL_RCC_GPIOA_CLK_ENABLE();

  __HAL_RCC_GPIOB_CLK_ENABLE();


  /*Configure GPIO pin Output Level */

  HAL_GPIO_WritePin(LD2_GPIO_Port, LD2_Pin, GPIO_PIN_RESET);


  /*Configure GPIO pin : B1_Pin */

  GPIO_InitStruct.Pin = B1_Pin;

  GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);


  /*Configure GPIO pin : LD2_Pin */

  GPIO_InitStruct.Pin = LD2_Pin;

  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

  HAL_GPIO_Init(LD2_GPIO_Port, &GPIO_InitStruct);


}


/* USER CODE BEGIN 4 */


/* USER CODE END 4 */


/**

  * @brief  This function is executed in case of error occurrence.

  * @retval None

  */

void Error_Handler(void)

{

  /* USER CODE BEGIN Error_Handler_Debug */

  /* User can add his own implementation to report the HAL error return state */


  /* USER CODE END Error_Handler_Debug */

}


#ifdef  USE_FULL_ASSERT

/**

  * @brief  Reports the name of the source file and the source line number

  *         where the assert_param error has occurred.

  * @param  file: pointer to the source file name

  * @param  line: assert_param error line source number

  * @retval None

  */

void assert_failed(uint8_t *file, uint32_t line)

  /* USER CODE BEGIN 6 */

  /* User can add his own implementation to report the file name and line number,

     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* USER CODE END 6 */

}

#endif /* USE_FULL_ASSERT */

按照引脚图连接好,一切准备就绪后通电,但始终不会亮,就像这样。

3264.jpg

我一度怀疑自己是不是接错线了,反复查看确认,LED小灯和pulse sensor都是电源接5V(3.3V也接过),地接地,LED小灯驱动引脚接PA0,pulse sensor驱动接PA6,但还是无法正常运行。

反复查看程序和接线,就是没找出问题。不过,有一个疑问,就是教程中的主函数中的num,前面没定义,好吧,我在一开始加上定义后,还是没法运行。看来,得另想办法了。。

image.png

我把程序献上,有哪个高手能帮我找出问题所在的,小弟感激不尽!!

heartly.zip




关键词: 跳动的心     pulse sensor     程序    

专家
2025-08-05 08:47:08     打赏
2楼

该信息正在审核中,请耐心等待,很快哦!

下载不了附件


管理员
2025-08-05 10:39:55     打赏
3楼

谢谢楼主分享


院士
2025-08-05 19:32:48     打赏
4楼

我也觉得这个最新版本的cubeMX长得太难看了。


高工
2025-08-05 10:10:52     打赏
5楼

照猫画虎,越画越好


共5条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]
脊柱疼是什么原因 尊字五行属什么 减肥中午吃什么比较好 形同陌路是什么意思 獠牙是什么意思
十月初一是什么节 行房出血是什么原因 儿童乐园有什么好玩的 梦见狗咬别人是什么意思 肺实性结节是什么意思
阿普唑仑是什么药 水可以变成什么 单核细胞百分比偏高是什么原因 路痴是什么意思 过劳肥是什么意思
心脏上有个小洞是什么病 同工同酬什么意思 人和是什么意思 肾上腺素是什么东西 樱花的花语是什么
市长是什么级别hcv8jop2ns2r.cn 清洁度三度什么意思hcv8jop6ns1r.cn 公安局跟派出所有什么区别aiwuzhiyu.com 民不聊生是什么意思hcv8jop0ns1r.cn 环移位了有什么症状hcv9jop8ns0r.cn
亲嘴什么感觉hcv8jop5ns7r.cn 什么口什么心hcv9jop5ns8r.cn 喉结肿大是什么原因hcv8jop1ns6r.cn 中国第一个不平等条约是什么hcv9jop4ns5r.cn 4岁属什么生肖hcv9jop4ns0r.cn
总是心慌是什么原因hcv8jop5ns5r.cn 螃蟹的血是什么颜色的hcv8jop3ns0r.cn 嘴发酸是什么原因引起hcv8jop2ns2r.cn 小鸟吃什么hcv8jop6ns5r.cn 牙龈萎缩是什么原因引起的hcv9jop4ns8r.cn
私处长痘痘是什么原因ff14chat.com 145什么意思travellingsim.com 傍大款是什么意思hcv8jop7ns3r.cn 出入是什么意思hcv7jop6ns2r.cn 药流有什么危害hcv8jop4ns0r.cn
百度