STM32闭环步进电机驱动程序芯片解密
芯片解密STM32单片机源程序如下:
- include "main.h"
- #include "adc.h"
- #include "tim.h"
- #include "gpio.h"
- /* Private includes ----------------------------------------------------------*/
- /* USER CODE BEGIN Includes */
- #include "includes.h"
- #include "lcd.h"
- /* USER CODE END Includes */
- /* Private typedef -----------------------------------------------------------*/
- /* USER CODE BEGIN PTD */
- /* USER CODE END PTD */
- /* Private define ------------------------------------------------------------*/
- /* USER CODE BEGIN PD */
- #define HALL_GPIO GPIOA
- //START 任务
- //设置任务优先级
- #define START_TASK_PRIO 10 //开始任务的优先级设置为最低
- //设置任务堆栈大小
- #define START_STK_SIZE 64
- //任务堆栈
- OS_STK START_TASK_STK[START_STK_SIZE];
- //任务函数
- void start_task(void *pdata);
-
- //LED0任务
- //设置任务优先级
- #define LED0_TASK_PRIO 2
- //设置任务堆栈大小
- #define LED0_STK_SIZE 64
- //任务堆栈
- OS_STK LED0_TASK_STK[LED0_STK_SIZE];
- //任务函数
- void led0_task(void *pdata);
- //Speed_ADC 任务
- //设置任务优先级
- #define SPEED_ADC_TASK_PRIO 1
- //设置任务堆栈大小
- #define SPEED_ADC_STK_SIZE 64
- //任务堆栈
- OS_STK SPEED_ADC_TASK_STK[SPEED_ADC_STK_SIZE];
- //任务函数
- void speed_adc_task(void *pdata);
- /* USER CODE END PD */
- /* Private macro -------------------------------------------------------------*/
- /* USER CODE BEGIN PM */
- /* USER CODE END PM */
- /* Private variables ---------------------------------------------------------*/
- /* USER CODE BEGIN PV */
- //定时器2捕获通道参数
- /* Private variables ---------------------------------------------------------*/
- uint16_t Channel1HighTime, Channel2HighTime, Channel3HighTime; //高电平时间
- uint16_t Channel1Period, Channel2Period, Channel3Period; //周期
- uint8_t Channel1Edge = 0, Channel2Edge = 0, Channel3Edge = 0; //上升沿
- uint16_t Channel1Percent, Channel2Percent, Channel3Percent; //占空比
- uint16_t Channel1PercentTemp[3] = {0, 0, 0};
- uint8_t Channel1TempCount = 0;
- uint16_t Channel1RisingTimeLast=0, Channel1RisingTimeNow, Channel1FallingTime;
- uint16_t Channel2RisingTimeLast=0, Channel2RisingTimeNow, Channel2FallingTime;
- uint16_t Channel3RisingTimeLast=0, Channel3RisingTimeNow, Channel3FallingTime;
- extern int motor_period;
- extern int motor_duty;
- extern int clock_wise;
- int current_speed = 0;
- int ADC_Speed = 500; //555 / 90% = 500
- int ADC_Value = 555; //
- BOOLEAN state = 0; // 0 关闭中 1 启动中
- /* USER CODE END PV */
- /* Private function prototypes -----------------------------------------------*/
- void SystemClock_Config(void);
- /* USER CODE BEGIN PFP */
- /* USER CODE END PFP */
- /* Private user code ---------------------------------------------------------*/
- /* USER CODE BEGIN 0 */
- /* USER CODE END 0 */
- /**
- * @brief The application entry point.
- * @retval int
- */
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- OSInit();
- OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
- /* 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_TIM1_Init();
- MX_ADC1_Init();
- MX_TIM2_Init();
- /* USER CODE BEGIN 2 */
- OSStart();
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }

芯片解密