在复用SPI总线时,必须先设置总线端口。读取其他ARM芯片(如NXP)一般很容易看出芯片的设置是否正确。不过对于STM32就容易让人迷惑了。例如,我们在使用SPI总线进行通信时,可以这样设置:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用的推挽输出
恐怕大家对MISO端口的设置就会产生疑惑了,MISO不是应该设置成为输入端口(GPIO_Mode_IN_FLOATING)才行的吗?
答题是肯定的,对于STM32的这一类管脚来说(如USART_RX)即可以设置成为输入模式,也可以设置成为复用的推挽输出。其工作都是正常的,不过建议大家还是设置成为输入端口的好,容易理解。
具体产生这一问题的原因是:从功能上来说,MISO应该配置为输入模式才对,但为什么也可以配置为GPIO_Mode_AF_PP?请看下面的GPIO复用功能配置框图。当一个GPIO端口配置为GPIO_Mode_AF_PP是,这个端口的内部结构框图如下:图中可以看到,片上外设的复用功能输出信号会连接到输出控制电路,然后在端口上产生输出信号。但是在芯片内部,MISO是SPI模块的输入引脚,而不是输出引脚,也就是说图中的"复用功能输出信号"根本不存在,因此"输出控制电路"不能对外产生输出信号。而另一方面看,即使在GPIO_Mode_AF_PP模式下,复用功能输入信号却与外部引脚之间相互连接,既MISO得到了外部信号的电平,实现了输入的功能。
关键字:STM32 SPI MISO 复用推挽输出
引用地址:
为什么STM32中SPI的MISO引脚设置成复用推挽输出
推荐阅读最新更新时间:2024-03-16 16:05
对STM32基本知识的详细剖析
STM32是一种功能比较强大的32位单片机,广泛应用于各种嵌入式设备中,由于它的普及性及丰富的资源,受到广大嵌入式开发者的喜欢,但要想学好用好STM32也并非易事,毕竟,相比8位、16位产品,STM32要复杂得多。 STM32的时钟 众所周知STM32有5个时钟源HSI、HSE、LSI、LSE、PLL,其实它只有四个,因为从下图中可以看到PLL都是由HSI或HSE提供的。 其中,高速时钟(HSE和HSI)提供给芯片主体的主时钟.低速时钟(LSE和LSI)只是提供给芯片中的RTC(实时时钟)及独立看门狗使用,图中可以看出高速时钟也可以提供给RTC。内部时钟是在芯片内部RC振荡器产生的,起振较快,所以时钟在芯片刚上电的时候
[单片机]
STM32启动文件——startup_stm32f10x_hd.s
一、启动文件的作用 (关于启动代码的作用,前面已经提到过了,这里再啰嗦一下) (1)初始化堆栈指针 SP; (2)初始化程序计数器指针 PC; (3)设置堆、栈的大小; (4)设置异常向量表的入口地址; (5)配置外部 SRAM作为数据存储器(这个由用户配置,一般的开发板可没有外部 SRAM); (6)设置 C库的分支入口__main(最终用来调用 main函数); (7)在 3.5版的启动文件还调用了在 system_stm32f10x.c文件中的SystemIni()函数配置系统时钟。 二、启动文件中提到的汇编指令 指令 作用 EQU 给数字常量取一个符号名,相当于 C 语言中的
[单片机]
STM32使用J-LINK下载HEX文件
使用J-LINK仿真器下载HEX文件到STM32芯片 工具/原料 J-Flash ARM 开发板 J-LINK仿真器 方法/步骤 打开“开始”-“所有程序”-SEGGER-JLink ARM v4.14c-J Flash ARM 打开“Option”选择“Project settings…”,进行烧写前的必要设置,如下图: 在“General”页,选择“USB”,如下图: 在“Target Interface”页,选择“SWD”,JTAG速度设置为“Auto selection”,如下图 在“CPU”页
[单片机]
STM32CubeIDE 的应用: 重定向printf 到stm32串口
一、导入stdio.h库文件 /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include stdio.h /* USER CODE END Includes */ 二、重写函数 /* USER CODE BEGIN 4 */ #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #define GETCHAR_PROTOTYPE int __io_getcha
[单片机]
STM32学习004_调试工具J_LINK
jlink是segger公司的产品,jlink的官方提供调试软件和驱动,调试软件有jlink命令(j-tag调试),j-mem(内存查看),j-flash(flash烧写)等我主要用到的是jlink commander,以下是它的命令集: SEGGER J-Link指挥官V4.20h('?'寻求帮助) 编译2010年10月5日19:11:57 DLL版本V4.20h,编译于2010年10月5日19:11:41 固件:J-Link ARM V8编译2010年5月5日08:59:59 硬件:V8.00 S / N:20100214 功能:RDI,FlashDL,FlashBP,JFlash,GDBFull VTarg
[单片机]
STM32固件库说明
l 版本 :v2.0.3 l 发布时间 :09/22/2008 l 功能: :给出了STM32微控制器片内所有外设的驱动函数,使用户把更多的时间花在应用程序的开发上,以加快产品上市时间。(实质上是将各种寄存器的参数配置定义成宏,并以结构体的方式给寄存器赋值,这样既方便又易懂) l 特点 : 由函数、数据结构和宏组成,包括了微控制器所有外设的功能特征,还包括了每个外设的驱动描述和应用实例 按照ANSI-C编写的,不受开发环境的影响,仅启动文件取决于开发环境(即程序和数据在寄存器中是如何配置的得根据所使用的开发环境),非常易于移植。 每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。函数和参数名称都进行了标准化(函
[单片机]
STM32——GPIO详细配置
一、STM32中GPIO模式的选择方法: (1)浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1 (2)带上拉输入_IPU——IO内部上拉电阻输入 (3)带下拉输入_IPD—— IO内部下拉电阻输入 (4)模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电 (5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能 (6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -
[单片机]
SPI总线详细解析
一.SPI总线简介 串行外围设备接口SPI(serial peripheral interface)总线技术是Motorola公司推出的一种同步串行接口。 SPI 用于CPU与各种外围器件进行全双工、同步串行通讯。它只需四条线就可以完成MCU与各种外围器件的通讯,这四条线是:串行时钟线(CSK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)、低电平有效从机选择线CS。当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一个字节后,从另一个外围器件接收的字节数据进入移位寄存器中。即完成一个字节数据传输的实质
[嵌入式]