洪嵐峰 發表於 2023-4-24 21:29:40

STM8S103F3

製作7500mAh/11000mAh電池點焊機
需要以下零件:

STM8S103F3 微控制器
直流電源供應器
一對焊接夾持器
一個LCD顯示器
MOSFET功率晶體管
一個電阻器
一個電容器
一個計時器模塊
電路板和連接電纜

以下是一個基本的 STM8S103F3 電池點焊機程式碼

可以根據需求進行修改:


#include <stdint.h>
#include "stm8s.h"

#define LED_PIN GPIO_PIN_5
#define LED_PORT GPIOB

#define MOSFET_PIN GPIO_PIN_1
#define MOSFET_PORT GPIOA

void GPIO_Init(void) {
  GPIO_DeInit(LED_PORT);
  GPIO_DeInit(MOSFET_PORT);

  GPIO_Init(LED_PORT, LED_PIN, GPIO_MODE_OUT_PP_LOW_FAST);
  GPIO_Init(MOSFET_PORT, MOSFET_PIN, GPIO_MODE_OUT_PP_LOW_FAST);
}

void TIM4_Init(void) {
  TIM4_DeInit();
  TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124); // 1ms interrupt
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  TIM4_Cmd(ENABLE);
}

void main(void) {
  uint16_t counter = 0;
  uint8_t isWelding = 0;

  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

  GPIO_Init();
  TIM4_Init();
  enableInterrupts();

  while (1) {
    if (counter >= 1000 && isWelding == 1) { // 1 second
      GPIO_WriteLow(MOSFET_PORT, MOSFET_PIN);
      isWelding = 0;
      counter = 0;
    }

    if (GPIO_ReadInputPin(GPIOC, GPIO_PIN_5) == RESET && isWelding == 0) {
      GPIO_WriteHigh(MOSFET_PORT, MOSFET_PIN);
      isWelding = 1;
    }

    if (isWelding == 1) {
      GPIO_Toggle(LED_PORT, LED_PIN);
    } else {
      GPIO_WriteLow(LED_PORT, LED_PIN);
    }
  }
}

// Timer 4 interrupt handler
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23) {
  counter++;
  TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}


這個程式碼假定您已經將 LED 和 MOSFET 連接到了 STM8S103F3 的 GPIO 腳位,並且已經使用了計時器模塊來實現定時功能。

程式碼中還包括一個簡單的中斷處理程序,每1ms增加一個計數器。
頁: [1]
查看完整版本: STM8S103F3