说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!
还请各位多多拍砖
|
|