中科因仑“3+1”工程特种兵精英论坛

标题: 【求拍砖】感觉STM32的SPI没有STM8的SPI好使 [打印本页]

作者: 惨淡的人生    时间: 2016-5-19 21:38
标题: 【求拍砖】感觉STM32的SPI没有STM8的SPI好使
        说stm32比stm8差,肯定会n多人拿棍子拍我,但是我这两条调试出来的结果,的确让我产生这种感觉!
我做一个实验,使用串口,将串口调试助手发送过来的字库bin文件烧录进SPIFlash中,stm8跟stm32同样使用
硬件spi方式,其中stm32使用SPI1方式2,CPOL = 1,CPHA = 1;时钟72M4分频得到18M的通信时钟速度,
在串口中断中,进入串口中断,我会有一下步骤:
接收串口数据,把数据烧录进SPI固定地址,地址值+1,同时读出地址信息,打印屏幕。
波特率控制在115200,使用stm8,勉强能够在115200的波特率下进行以上工作,信息也能完整,但是stm32则
不可以,得到的信息是,接收到的字节数打了个5折,也就是说,串口每发送两个字节过来,stm32才接到加处理到
1个字节,那么另外一个字节就丢了,而stm8却可以勉强处理,如果波特率设置在9600,stm32依然不行,而stm8
完美处理消化!
        不知道是我程序哪里处理不好,还是我这个感觉是真的,以下给我的代码信息:
stm32串口中断:
  • u32 Ziku_Addr = 1024*1024*6;
  • void USART1_IRQHandler(void)                        //串口1中断服务程序
  • {
  •         uint8_t wData = 0;
  •         uint8_t rData = 0;
  •         if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
  •         {
  •                 wData=USART_ReceiveData(USART1);
  •                 SPI_Flash_Write_Page(&wData, Ziku_Addr, 1);
  •                 SPI_Flash_Read(&rData,Ziku_Addr,1);
  •                 UART1_SendByte(rData);
  •                 Ziku_Addr++;
  •         }
  • }

[color=rgb(51, 102, 153) !important]复制代码



stm8串口中断:
  • void UART_IRQ( void )
  • {
  •         uint8_t RecieveBuf = 0;
  •         uint8_t RXData = 0;
  •         //以下是用户处理函数
  •         RXData = UART_ReceiveByte();
  •         SPI_FLASH_BufferWrite(&RXData, addr, 1);
  •         SPI_FLASH_BufferRead(&RecieveBuf, addr, 1);
  •         addr++;
  •         UART_SendByte(RXData);
  •         //清除接收标志位
  •         UART2_ClearITPendingBit(UART2_IT_RXNE);
  • }

[color=rgb(51, 102, 153) !important]复制代码



spiflash函数一模一样,唯一不同就是stm32挂的是8Mbyte的Flash,而stm8挂的是2Mbyte的Flash!
还请各位多多拍砖












欢迎光临 中科因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4