STM32--工程移植

一、新建立工程

确保新工程没有错误

二、移植

在这个文件路径下进行添加

新建文件夹

在新建文件夹下面建立.c和.h两个文件。.c存放源文件.h存放头文件

打开keil5进行下列操作

将写好的源文件复制到新建立的.c文件

将写好的头文件添加在在新键.h文件里面

添加main测试程序

复制代码
#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/delay/delay.h"

#include "tmx_uart.h"
#include "usmart.h"
#include "tmx_i2c.h"
#include "tmx_at24c02.h"
#include "tmx_oled.h"
#include "tmx_ph2_timer.h"

TMX_UART_DEV* uart_dev;
TMX_I2C_MASTER_DEV * i2c_master_dev;
TMX_AT24C02_DEV * at24c02_dev;
TMX_OLED_DEV * oled_dev;
TMX_PH2_TIMER_DEV* ph2_timer_dev;

uint8_t i2c_buffer[10];
uint8_t i2c_len;

void printfBuffer(uint8_t* buffer,uint16_t len);

int main(void)
{
    HAL_Init();                         /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
    delay_init(72);                     /* 延时初始化 */
    usmart_init(72);

    //初始化串口2
    uart_dev = tmx_uart_init(TMX_UART1,115200,UART_DMA_ON);
    i2c_master_dev = tmx_i2c_master_init();
    at24c02_dev = tmx_at24c02_init();
    oled_dev = tmx_oled_init();
    ph2_timer_dev = tmx_ph2_timer_init();

    //开启单次接收
    uart_dev->start_receive();

    printf("tmx\r\n");
    uint8_t temp1 = 0;
    
    uint8_t niming[10];
    niming[0] = 0xAB;
    niming[1] = 0x00;
    niming[2] = 0x00;
    niming[3] = 0xF1;
    //小端模式,数据长度是 0x0002,低8位放前面niming[4]里,高八位放后面niming[5]
    niming[4] = 0x02;
    niming[5] = 0x00;
    
    while(1)
    {     
        if(ph2_timer_dev->event == 1){
            temp1++;
            ph2_timer_dev->event = 0;
            //使用匿名上位机显示实时速度
            if(temp1 >10){
                int16_t speed = ph2_timer_dev->get_speed_left(500);
                //处理小端模式
                uint8_t* ptr; 
                ptr = (uint8_t*)&speed;
                niming[6] = ptr[0];
                niming[7] = ptr[1];
                //计算校验数据
                uint8_t sumcheck = 0;
                uint8_t addcheck = 0;
                uint8_t flen = niming[4]+niming[5]*256;
                for(uint8_t i=0;i<(flen+6);i++){
                    sumcheck += niming[i];
                    addcheck += sumcheck;
                }
                niming[8] = sumcheck;
                niming[9] = addcheck;
                //通过串口发送
                //HAL_UART_Transmit(&(uart_dev->uart),niming,10,HAL_MAX_DELAY);
                
                temp1 = 0;
            }
        }
        if(uart_dev->finish == 1){
        //识别usmart格式 u_xxx(yyy)\r\n
            if(uart_dev->length>=8 && uart_dev->buffer[0] == 'u' && uart_dev->buffer[1] == '_' && uart_dev->buffer[uart_dev->length-2] == '\r' && uart_dev->buffer[uart_dev->length-1] == '\n'){
            //如果时usmart格式,交由usmart处理    
            usmart_action((char *)(uart_dev->buffer));
            }
            else{
            //如果不是,直接打印
            printfBuffer(uart_dev->buffer,uart_dev->length);
            } 
            //处理完成之后,再次开启接收
            uart_dev->start_receive();
        }
    }
}



/**********      USMART测试           **************/

void u_test1(uint8_t a){
	uart_dev->start_transmit((uint8_t*)"u_test1\r\n",9);
}

void printfBuffer(uint8_t* buffer,uint16_t len){
	printf("data len = %d\r\n",len);
	for(uint8_t i = 0;i<len;i++){
			printf("%c",buffer[i]);
	}
	printf("\r\n");
}

运行一遍

有错

替换一下(替换串口文件)

有串口(UART)的都先注释掉

添加这个

移植完成

将程序烧录如板子里面,在匿名助手中验证

数据项 "A" 的数值为 0,数据波形暂无动态变化,可能处于初始连接或未启动数据传输的状态。

复制代码
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    // 1. 动态设置PWM占空比
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, duty);
    
    // 2. 获取控制引脚电平(也可直接用PWM引脚控制电机/呼吸灯)
    ctrl_level = HAL_GPIO_ReadPin(CTRL_PORT, CTRL_PIN);
    
    // 3. 保留原格式发送PWM占空比+控制电平(不修改发送格式)
    Ano_SendPwmData(duty, ctrl_level);
    
    // 4. 占空比渐变逻辑(实现呼吸/电机转速变化)
    if (dir) {
      duty += 10; // 占空比+1%
      if (duty >= 999) dir = 0;
    } else {
      duty -= 10; // 占空比-1%
      if (duty <= 0) dir = 1;
    }
    
    HAL_Delay(20); // 控制渐变速度
    /* USER CODE END WHILE */

将原程序里面的代码替换为这段代码即可得到一下波形

注释:本次使用的工程模板为正点原子提供的工程模板

相关推荐
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11013 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元3 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133973 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315203 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
古译汉书3 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
Alaso_shuang3 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟3 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126913 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315203 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机