打印
[STM32F4]

stm32模块移植

[复制链接]
19|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
在工作中,需要更换硬件平台。那么把A平台的模块应用程序放在B平台上运行,就是移植。

移植步骤:

(1)找到main函数

(2)找到模块的初始化函数,查看该函数所在的源文件和头文件。

(3)把源文件和头文件放在B平台的工程中。

(4)检查GPIO的引脚编号,把它修改成B平台的引脚,并初始化----硬件初始化/软件初始化

(5)模块的通讯协议保留。

(6)验证----若是软件初始化(模拟总线),需要注意时钟的主频。

使用特权

评论回复
沙发
范德萨发额|  楼主 | 2024-9-29 00:57 | 只看该作者
OLED移植到STM32F407ZE
1、找商家要资料,包括代码

2、解压代码在里面找跟你使用的芯片最相似的那一个



使用特权

评论回复
板凳
范德萨发额|  楼主 | 2024-9-29 00:57 | 只看该作者
3、在解压后的文件中找到OLED文件夹将它复制到自己的工程文件中

使用特权

评论回复
地板
范德萨发额|  楼主 | 2024-9-29 00:57 | 只看该作者
4、添加.h和.c文件

使用特权

评论回复
5
范德萨发额|  楼主 | 2024-9-29 00:57 | 只看该作者

使用特权

评论回复
6
范德萨发额|  楼主 | 2024-9-29 00:58 | 只看该作者
在oled.h文件中添加自己芯片的头文件

使用特权

评论回复
7
范德萨发额|  楼主 | 2024-9-29 00:58 | 只看该作者
在解压的文件夹中会有一个工程,打开找到main函数,将模块初始化函数和案例复制到自己的main函数中

使用特权

评论回复
8
范德萨发额|  楼主 | 2024-9-29 00:58 | 只看该作者
进入OLED初始化,对引脚进行修改

使用特权

评论回复
9
范德萨发额|  楼主 | 2024-9-29 00:58 | 只看该作者
解压的是IIC协议的代码所以对它的通信协议进行修改(包括start,stop,ack,和发送。因为OLED只是显示所以只需要32给它发数据,32不接收)

/*
  OLED_SCL,OLED_SDA是自己定义的引脚宏
  //OLED屏幕 IIC端口定义   SCL--PB7  SDA---PA4
在oled.h文件中定义宏
#define OLED_SCL                PBout(7)
#define OLED_SDA                PAout(4)
*/

void IIC_Start()
{
        /*
        OLED_SCLK_Set() ;
        OLED_SDIN_Set();
        OLED_SDIN_Clr();
        OLED_SCLK_Clr();
        */
        OLED_SCL=1;
        OLED_SDA=1;
        delay_us(5);
        //数据线下降沿
        OLED_SDA = 0;
        delay_us(5);
        //时钟线拉低----方便数据线修改电平
        OLED_SCL = 0;
        delay_us(5);
}

/**********************************************
//IIC Stop
**********************************************/
void IIC_Stop()
{
        /*
        OLED_SCLK_Set() ;
//        OLED_SCLK_Clr();
        OLED_SDIN_Clr();
        OLED_SDIN_Set();
        */
        OLED_SCL=0;
        OLED_SDA=0;
        delay_us(5);
        //数据线下降沿
        OLED_SDA = 1;
        delay_us(5);
        //时钟线拉低----方便数据线修改电平
        OLED_SCL = 1;
        delay_us(5);
}

void IIC_Wait_Ack()
{

        //GPIOB->CRH &= 0XFFF0FFFF;        //设置PB12为上拉输入模式
        //GPIOB->CRH |= 0x00080000;
//        OLED_SDA = 1;
//        delay_us(1);
        //OLED_SCL = 1;
        //delay_us(50000);
/*        while(1)
        {
                if(!OLED_SDA)                                //判断是否接收到OLED 应答信号
                {
                        //GPIOB->CRH &= 0XFFF0FFFF;        //设置PB12为通用推免输出模式
                        //GPIOB->CRH |= 0x00030000;
                        return;
                }
        }
*/
//        OLED_SCLK_Set() ;
//        OLED_SCLK_Clr();
        OLED_SCL = 1;
        delay_us(5);
        OLED_SCL = 0;
    delay_us(5);
}
/**********************************************
// IIC Write byte
**********************************************/

void Write_IIC_Byte(unsigned char IIC_Byte)
{
        /*
        unsigned char i;
        unsigned char m,da;
        da=IIC_Byte;
        OLED_SCLK_Clr();
        for(i=0;i<8;i++)               
        {
                        m=da;
                //        OLED_SCLK_Clr();
                m=m&0x80;
                if(m==0x80)
                {OLED_SDIN_Set();}
                else OLED_SDIN_Clr();
                        da=da<<1;
                OLED_SCLK_Set();
                OLED_SCLK_Clr();
                }
        */
        uint8_t i;
       
        //拉低时钟线
        OLED_SCL = 0;
        delay_us(5);
       
        for(i=0; i<8; i++)
        {
                if( (IIC_Byte>>(7-i)) &0x01 == 1) //高位先出
                {
            OLED_SDA = 1;
                }
                else
        {
                        OLED_SDA = 0;
                }
                delay_us(5);
                //拉高时钟线发送数据
                OLED_SCL = 1;
                delay_us(5);
                //拉低时钟线准备下一次修改SDA的值
                OLED_SCL = 0;
                delay_us(5);
        }
}

使用特权

评论回复
10
范德萨发额|  楼主 | 2024-9-29 00:59 | 只看该作者
移植完成,编译0error

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

877

帖子

1

粉丝