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 */

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

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

相关推荐
QK_002 小时前
STM32--DMA
stm32·单片机·嵌入式硬件
福尔摩斯张2 小时前
STM32数码管和LCD显示技术深度解析(超详细)
数据库·stm32·单片机·嵌入式硬件·mongodb
d111111111d2 小时前
STM32 DMA传输配置详解:数据宽度与传输方向设置指南
笔记·stm32·单片机·嵌入式硬件·学习
清风6666663 小时前
基于单片机的多路热电偶温度监测与报警器
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
Archie_IT3 小时前
基于STM32F103C8T6标准库的OLED显示屏中文汉字显示实现_资料编号39
stm32·单片机·嵌入式硬件·mcu·硬件工程·信息与通信·信号处理
一路往蓝-Anbo3 小时前
STM32单线串口通讯实战(三):协议层设计 —— 帧结构、多机寻址与硬件唤醒
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网
别了,李亚普诺夫4 小时前
DMA学习笔记
笔记·stm32
v先v关v住v获v取4 小时前
天然气管道内检测机器人检测节设计14张cad+三维图+设计说明书
科技·单片机·51单片机
无垠的广袤4 小时前
【上海晶珩睿莓 1 单板计算机】物联网环境监测终端
linux·python·嵌入式硬件·物联网·mqtt·home assistant