完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
|
|
|
|
void spi_slave_init() { //NSS GPIOA->DDR &= ~SPI_SSEL_PIN; //输入模式 GPIOA->CR1 &= ~SPI_SSEL_PIN; //浮空输入 GPIOA->ODR &= (uint8_t)~SPI_SSEL_PIN; //write low GPIOC->DDR |= SPI_MISO_PIN; //输出模式 GPIOC->CR1 |= SPI_MISO_PIN; //推挽输出 GPIOC->DDR &= ~SPI_MOSI_PIN; //输入模式 GPIOC->CR1 &= ~SPI_MOSI_PIN; //浮空输入 GPIOC->DDR &= ~SPI_CLK_PIN; //输入模式 GPIOC->CR1 &= ~SPI_CLK_PIN; //浮空输入 SPI_DeInit(); // Initialize SPI in Slave mode, NSS hardwere management */ SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_SLAVE, SPI_CLOCKPOLARITY_HIGH, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,(uint8_t)0x07); SPI_ITConfig(SPI_IT_RXNE, ENABLE);// Receive buffer not empty interrupt Enable SPI_Cmd(ENABLE); // SPI enable } uint8_t spi_rw(uint8_t byte) { char ch = 0; while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET); SPI->DR = byte; while(SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET); ch = ((uint8_t)SPI->DR); return ch; } INTERRUPT_HANDLER(SPI_IRQHandler, 10) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ uint8_t Rx_byte; Rx_byte = spi_rw(0x18); printf("%x ", Rx_byte); } 中断里面收到的打印全是0x1,不知道什么原因啊,但是SPI Master可以收到stm8发送的0x18 |
|
|
|
|
|
|
|
看起来这个spi_rw不适合在ISR里面用。
|
|
|
|
没用过主从这种的
|
|
|
|
用示波器看看是什么波形
|
|
|
|
波特率匹配吗
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
878 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
936 浏览 2 评论
2044 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1145 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1568 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 18:17 , Processed in 0.778831 second(s), Total 83, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号