STM32L011 PA6 空片时端口状态
客户反映 STM32L011 PA6 空片时进入 system memory 内部自带的 bootloader后,GPIO 的实际测试状态同 AN2606 中描述 push-pull pull-down 有出入,实际测试为高电平。
问题分析
查看 AN2606 手册,发现 PA6 配置为 SPI 模式,GPIO 的配置为 push-pull pulldown 模式。
测试结果
SPI 脚位的电平是由于 SPI 协议决定的:
SPI 通信通过 CPOL(时钟极性)和 CPHA(时钟相位)来控制 SPI 设备的通信模式,具体如下:
时钟极性(CPOL)定义了 SCLK 时钟线空闲状态时的电平:
1.CPOL=0,即 SCLK=0,表示 SCLK 时钟信号线在空闲状态时的电平为低电平,因此有效状态为高电平。
2.CPOL=1,即 SCLK=1,表示 SCLK 时钟信号线在空闲状态时的电平为高电平,因此有效状态为低电平。
结论
GPIO 寄存器配置是对的,由于它的上拉或下拉是弱上拉或弱下拉,GPIO 口外部测得的电平是由 SPI 寄存器配置和将要发送到总线上的数据(针对 SPI_CR1. CPOL= 0,SPI_CR1. CPHA =0)来决定的。
不要盲目参考 AN2606 中的 GPIOA PA6 pull-pull pull-down, 以为 MISO 默认电平为 0 电平。还要参考 SPI 协议和 AN4286 中的 SPI bootloader 协议。
在 STM32L011 ISP 方式,系统内部自带的 bootloader 代码配置如下:
SPI_CR1. CPOL= 0, SPI_CR1. CPHA =0, 这种情况下,PA6 脚位脚位空闲状态是1 电平(0xA5 等待发送中)。(芯片内的 bootloader 代码的配置)