打印
[AT32F423]

【AT-START-F423测评】CMT2300A收发通讯

[复制链接]
1872|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
HES21|  楼主 | 2023-11-7 16:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 muyichuan2012 于 2023-11-7 19:31 编辑

     本文主要内容就是使用AT-START-F423开发板连接CMT2300A,进行单向通讯
本文适合任何小白朋友


1-我们先准备硬件,AT-START-F423开发板连接CMT2300A



(这里没有打广告,这个模组确实在飞线调试方面比较容易)


2-然后我们需要查看CMT2300A的资料手册,这里的话我们可以去芯片官网,也可以去模组官网,一般来说两边都可以拿到一些资源

芯片官网:https://www.hoperf.cn/


这两个地方都可以拿到非常多的资料,当然想要了解这个芯片当然要把下面所有的资料都看完的。


如果只是想拿程序来跑,不看问题也不大。




3-上一步我们拿到了非常多的资料,


当然在此之前我们得先了解一下芯片的通讯协议:


官方资料这里说的很清楚,类似SPI的接口,但是数据口是双向的,

基本上我们只需要操作芯片的4个口就行了,但是不是标准spi,意味着我们不能用开发板的硬件spi了,

需要我们自己用IO口模拟协议,这多费劲啊,来看看资料里面有没有例子。


模组厂商非常人性化有4个例子(官网也有,没有这个好),我们用STM32的来参考


有基础的同学稍微看一下例子程序应该就知道,程序主要的只需要用到uart,和模拟spi驱动,以及cmt2300a的应用




文件中的h和c文件全部添加到工程中。

需要我们修改的只有这个驱动文件,我们只需要在开发板上实现uart,实现div_cmt2300a.c驱动就可以了,

实际只需要我们适配设置io高低电平,设置io方向,

IO分配:


FCSB -> PB6

FCSB -> PB5

SDIO -> PB4

CLK -> PB3


使用bench软件生成我们的基础程序。只需要配置uart1和4个io口




生成后就可以打开工程了,继续把例子里面的文件拷贝过来


添加到keil中


然后需要适配一好printf函数,适配好delay_ms

接下来修改驱动div_cmt2300a.c




#define SDA0_IN()  {GPIOB->cfgr &= ~(3<<(4*2));GPIOB->cfgr |= (0<<(4*2));}
#define SDA0_OUT() {GPIOB->cfgr &= ~(3<<(4*2));GPIOB->cfgr |= (1<<(4*2));}
#define READ_SDA0  gpio_input_data_bit_read(GPIOB, GPIO_PINS_4)

#define IIC0_SDA_1  gpio_bits_set(GPIOB, GPIO_PINS_4)
#define IIC0_SDA_0  gpio_bits_reset(GPIOB, GPIO_PINS_4)



void cmt_spi3_delay(void)
{
    int n = 20;
    while(n--);
        //delay_us(1);
}

void cmt_spi3_delay_us(void)
{
    int n = 20;
    while(n--);
        //delay_us(1);
}

void cmt_spi3_csb_out(void)
{

         /* gpio output config */
//        gpio_init_type gpio_init_struct;
//  gpio_default_para_init(&gpio_init_struct);

//  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
//  gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
//  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
//  gpio_init_struct.gpio_pins = GPIO_PINS_5;
//  gpio_init_struct.gpio_pull = GPIO_PULL_UP;
//  gpio_init(GPIOB, &gpio_init_struct);
}

void cmt_spi3_fcsb_out(void)
{

//        gpio_init_type gpio_init_struct;
//  gpio_default_para_init(&gpio_init_struct);

//  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
//  gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
//  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
//  gpio_init_struct.gpio_pins = GPIO_PINS_6;
//  gpio_init_struct.gpio_pull = GPIO_PULL_UP;
//  gpio_init(GPIOB, &gpio_init_struct);
}

void cmt_spi3_sclk_out(void)
{

//        gpio_init_type gpio_init_struct;
//  gpio_default_para_init(&gpio_init_struct);

//  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_MODERATE;
//  gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
//  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
//  gpio_init_struct.gpio_pins = GPIO_PINS_3;
//  gpio_init_struct.gpio_pull = GPIO_PULL_UP;
//  gpio_init(GPIOB, &gpio_init_struct);
}

void cmt_spi3_sdio_out(void)
{

        SDA0_OUT();
}

void cmt_spi3_sdio_in(void)
{
        SDA0_IN();

}

void cmt_spi3_csb_1(void)
{

        gpio_bits_set(GPIOB,GPIO_PINS_5);
}

void cmt_spi3_csb_0(void)
{

        gpio_bits_reset(GPIOB,GPIO_PINS_5);
}

void cmt_spi3_fcsb_1(void)      
{
   gpio_bits_set(GPIOB,GPIO_PINS_6);
}

void cmt_spi3_fcsb_0(void)
{
   gpio_bits_reset(GPIOB,GPIO_PINS_6);
}

void cmt_spi3_sclk_1(void)
{
        gpio_bits_set(GPIOB,GPIO_PINS_3);
}

void cmt_spi3_sclk_0(void)
{
        gpio_bits_reset(GPIOB,GPIO_PINS_3);
}

void cmt_spi3_sdio_1(void)
{
        IIC0_SDA_1;

}

void cmt_spi3_sdio_0(void)
{
        IIC0_SDA_0;

}

uint8_t cmt_spi3_sdio_read(void)
{
        
        uint8_t re =READ_SDA0;

  return re;
}
到这基本驱动已经移植完成了。

这个驱动其实模组厂商也是参考官方的,遗留的冗余代码一句都没少,比如



这几句把io设置成输出,完全就是多余的,因为初始化的时候已经把io初始化了,不知道官方是什么意思。


main函数调用:


初始化ok的话会有如下打印:



程序只能选择发送或者接收,需要用两套硬件来进行测试,我这边手上用了一个stm32来进行交叉测试。

源码:




653376549dc3c5887c.png (91.19 KB )

653376549dc3c5887c.png

660086549e07e55141.png (84.09 KB )

660086549e07e55141.png

597236549e51014063.png (10.84 KB )

597236549e51014063.png

使用特权

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

本版积分规则

1

主题

8

帖子

1

粉丝