完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一个已完成的硬件方案,重新用CUBE重新配置,功能是用SPI接口驱动一片ADC
SPI能够接收16位数据即可,PA5 (SCK) PA6(MISO)接ADC 的 SCK MOSI,ADC需要一个周期的矩型波控制启动转换 PA7接到ADC的CONV引脚上 硬件与配置 PA5 PA6 PA7 IO配置 PA5 ALT_PP (SPI_SCK) PA6 INPUT_PP (SPI_MISO) PA7 ALT_PP (tiM3_CH2) 用PWM方式产生脉冲 结果发现无论怎么配置TIM3 PA7死活得不到PWM脉冲,结果发现 CUBE给的代码中将SPI1 CR1的RXONLY为1,而原来的SPI1 CR1的RXONLY 为0 RXONLY改成0脉冲就有了 这个是TIM3_CH2有输出的SPI配置 只要点上RXONLY脉冲就没了 查找数据手册 1 clock and 1 unidirectional data wire (BIDIMODE=0) In this mode, the application can use the SPI either in transmit-only mode or in receive-only mode. ● Transmit-only mode is similar to full-duplex mode (BIDIMODE=0, RXONLY=0): the data are transmitted on the transmit pin (MOSI in master mode or MISO in slave mode) and the receive pin (MISO in master mode or MOSI in slave mode) can be used as a general-purpose IO. In this case, the application just needs to ignore the Rx buffer (if the data register is read, it does not contain the received value). ● In receive-only mode, the application can disable the SPI output function by setting the RXONLY bit in the SPI_CR2 register. In this case, it frees the transmit IO pin (MOSI in master mode or MISO in slave mode), so it can be used for other purposes. 按这个描述 正确做法是 设置RXONLY位 主模式的PA7就被释放出来,可做它用 而事实确是相反 不知道是那里弄错了,还是有别的什么问题 |
|
相关推荐
1个回答
|
|
从您的描述来看,您在使用STM32F103的SPI接口驱动一片ADC,并且遇到了一些问题。首先,我们来梳理一下您的硬件连接和配置:
1. PA5 (SCK) 连接到 ADC 的 SCK 2. PA6 (MISO) 连接到 ADC 的 MISO 3. PA7 连接到 ADC 的 CONV 引脚 4. PA5 配置为 ALT_PP (SPI_SCK) 5. PA6 配置为 INPUT_PP (SPI_MISO) 6. PA7 配置为 ALT_PP (TIM3_CH2) 您提到的问题是在尝试使用TIM3的PA7产生PWM脉冲时,发现没有脉冲输出。经过检查,您发现CUBE生成的代码中将SPI1 CR1的RXONLY设置为1,而原来的设置为0。在将RXONLY设置回0后,PWM脉冲正常输出。 现在,我们来分析这个问题: 1. SPI接口的工作原理是全双工通信,即可以同时进行发送和接收操作。但是,在某些应用场景下,我们可能只需要接收数据,而不需要发送数据。这时,我们可以将SPI配置为接收模式(Receive Only Mode),即RXONLY设置为1。 2. 在您的应用中,您需要通过SPI接口接收ADC的16位数据。当RXONLY设置为1时,SPI接口将只接收数据,而不发送数据。这可能导致您的TIM3_CH2无法正常产生PWM脉冲。 3. 将RXONLY设置为0后,SPI接口恢复为全双工通信模式,这时TIM3_CH2可以正常产生PWM脉冲。 为了解决这个问题,您可以尝试以下方法: 1. 保持RXONLY为0,确保SPI接口可以正常进行全双工通信。 2. 在产生PWM脉冲之前,确保SPI接口已经完成了数据接收操作。您可以通过查询SPI接口的状态标志(如SPI_RXNE)来实现这一点。 3. 如果您的ADC需要在接收数据之前启动转换,您可以在发送PWM脉冲之前,通过SPI接口发送一个特定的命令或数据来启动ADC的转换。 4. 在接收到ADC的数据后,您可以根据需要对数据进行处理,例如转换为电压值或进行滤波等。 通过以上步骤,您应该可以实现使用STM32F103的SPI接口驱动ADC,并正常接收16位数据,同时通过TIM3_CH2产生PWM脉冲来控制ADC的启动转换。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1614 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1541 浏览 1 评论
970 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
682 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1592 浏览 2 评论
1863浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
644浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
515浏览 3评论
531浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
504浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 22:28 , Processed in 0.780368 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号