GD32H7 spi

直接上代码,主要参考GD32H7用户手册

gpio的配置,

没啥说的。

/***********************************************************
 1. SPI3_CLK --> PE2,   SPI3_MISO--> PE5,  SPI3_MOSI--> PE6,
 2. SPI3_NSS0 --> PE7,  SPI3_NSS1 --> PE4,
************************************************************/
static void spi3_gpio_init(void)
{
    rcu_periph_clock_enable(RCU_GPIOE);
    rcu_periph_clock_enable(RCU_SPI3);

    gpio_af_set(GPIOE, GPIO_AF_5, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_2);
    gpio_mode_set(GPIOE, GPIO_MODE_AF, GPIO_PUPD_NONE, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_2);
    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_2);

    /*PE4,NSS0*/
    gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_4);
    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_4);
    gpio_bit_set(GPIOE, GPIO_PIN_4);

    /*PE7,NSS1*/
    gpio_mode_set(GPIOE, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_7);
    gpio_output_options_set(GPIOE, GPIO_OTYPE_PP, GPIO_OSPEED_60MHZ, GPIO_PIN_7);
    gpio_bit_set(GPIOE, GPIO_PIN_7);
}

spi的配置

重点参考手册;
参考手册
在这里插入图片描述

spi时钟选择

这里使用单线单主机模式,即常规配置

SPI3/4的时钟,与spi1/2/5的并不完全相同,选择的时候,需要注意:

在这里插入图片描述

NSS配置

使用主机软件NSS模式,这里的软件模式其实是SPI的NSS引脚使用内部寄存器来控制,所以可以节约一个外部的GPIO。而上面最开始GPIO引脚配置的NSS PE4 PE7其实是连接从机SPI的NSS。
主机发送的时候,当PE4/PE7为无效电平时,仍然可以将数据发出去的,只是从机收不到而已。

简单说下NSS的功能:

从机模式
当配置为从机模式(MSTMOD = 0)时,在硬件NSS模式(NSSIM = 0)下,SPI从NSS引脚获取NSS电平,在软件NSS(NSSIM = 1)下,
SPI根据NSSI位得到NSS电平。只有当NSS为有效电平时,发送或接收数据。在软件NSS模式下,不使用NSS引脚。用户可以设置NSSIOPL
位来决定输入/输出外部信号的有效电平(在NSS引脚上)。

在这里插入图片描述

主机模式

主机软件NSS模式看得我云里雾里,没有ST的清晰。有没有大佬解释下?
在这里插入图片描述
这里要注意主机软件NSS模式时,spi的初始化配置时,也就是在使能spi之前,NSS引脚的电平,否则会产生主机配置错误
无法使能SPI。
结合下面的配置为主机软件NSS模式,废话几句:
第7行,MSTMOD = 1,主机模式;
第10行,NSSIM=1,软件模式;即NSS引脚的有效电平、输入输出,由寄存器配置决定;NSS的有效电平为低电平
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至于下面第15行,是将主机模式NSS输出使能。如果注释,则SPI会产生主机配置错误,无法使能SPI,不懂为何?
大佬求解释
在这里插入图片描述

static void spi3_config(void)
{
1    rcu_periph_clock_enable(RCU_SPI3);
2    rcu_spi_clock_config(IDX_SPI3, RCU_SPISRC_APB2);

3    spi_i2s_deinit(SPI3);
4    spi_parameter_struct spi_init_struct;

5    spi_struct_para_init(&spi_init_struct);
6    spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;
7    spi_init_struct.device_mode = SPI_MASTER;
8    spi_init_struct.data_size = SPI_DATASIZE_8BIT;
9    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_2EDGE;
10    spi_init_struct.nss = SPI_NSS_SOFT;
11    spi_init_struct.prescale = SPI_PSC_8;//300M/8=37.5MHZ,300M/16=18.75MHZ
12    spi_init_struct.endian = SPI_ENDIAN_MSB;
13    spi_init(SPI3, &spi_init_struct);
14    spi_byte_access_enable(SPI3);//使能按字节访问
    /* enable SPI NSS output ,is important for spi3*/
15    spi_nss_output_enable(SPI3);
}

SPI收发

超时部分可自行封装为函数。高速模式下可能会出现时钟相位偏移,还需注意时钟拉伸

uint8_t spi3_trx_byte(uint32_t spi_periph, uint8_t data)
{
    // SPI_STATC(spi_periph) = 0;
    uint8_t retry = 0;
    while (RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_TP)) {
        retry++;
        if (retry > SPI_RETRY_TIME) {
            return ERROR;
        }
    }
    spi_master_transfer_start(SPI3, SPI_TRANS_START);
    spi_i2s_data_transmit(spi_periph, data);
    retry = 0;
    while (RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_RP)) {
        retry++;
        if (retry > SPI_RETRY_TIME) {
            return ERROR;
        }
    }
    /*wait transmit/receive complete,specially in high speed mode*/
    // while (RESET == spi_i2s_flag_get(spi_periph, SPI_FLAG_ET));
    return(spi_i2s_data_receive(spi_periph));
}
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值