1 概述在实际应用中,为了分析Flash中的数据,需要读取并通过串口显示数据,根据实际应用场景规则整齐地按照8位、16位、32位读取并显示Flash数据会非常提高分析效率。 下面总结了实际应用中按照8位、16位、32位读取并在串口软件中显示Flash数据的代码及现象。 代码仅供参数使用。 2 代码- #include "main.h"
- #include "stdio.h"
- //重定向c库函数printf到串口,重定向后可使用printf函数
- int fputc(int ch, FILE *f)
- {
- USART_TxData(USART1, (char) ch);
- while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
- return (ch);
- }
- //重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
- int fgetc(FILE *f)
- {
- while (USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET);
- return (int)USART_RxData(USART1);
- }
- void PrintfByteData(uint8_t *p_data_addr,uint32_t data_num)
- {
-
- uint32_t i=0,j=0;
-
- printf(" ");
- for(i=0;i<16;i++)
- {
- printf("%X ",i);
- }
- printf("\n\r");
- for(i=0;i<data_num;i++)
- {
- if(j%16==0)
- {printf("0x%08X: 0x%02X ",&p_data_addr[i],p_data_addr[i]);}
- else if((j+1)%16==0)
- {printf("0x%02X\n\r",p_data_addr[i]);}
- else
- {printf("0x%02X ",p_data_addr[i]);}
- j++;
- }
- printf("\n\r");
- }
- void PrintfHalfWordData(uint16_t *p_data_addr,uint32_t data_num)
- {
- uint32_t i=0,j=0;
-
- printf(" ");
- for(i=0;i<8;i++)
- {
- printf("%X ",i*2);
-
- }
- printf("\n\r");
- for(i=0;i<data_num;i++)
- {
- if(j%8==0)
- {printf("0x%08X: 0x%04X ",&p_data_addr[i],p_data_addr[i]);}
- else if((j+1)%8==0)
- {printf("0x%04X\n\r",p_data_addr[i]);}
- else
- {printf("0x%04X ",p_data_addr[i]);}
- j++;
- }
- printf("\n\r");
- }
- void PrintfWordData(uint32_t *p_data_addr,uint32_t data_num)
- {
- uint32_t i=0,j=0;
-
- printf(" ");
- for(i=0;i<4;i++)
- {
- printf("%X ",i*4);
-
- }
- printf("\n\r");
- for(i=0;i<data_num;i++)
- {
- if(j%4==0)
- {printf("0x%08X: 0x%08X ",&p_data_addr[i],p_data_addr[i]);}
- else if((j+1)%4==0)
- {printf("0x%08X\n\r",p_data_addr[i]);}
- else
- {printf("0x%08X ",p_data_addr[i]);}
- j++;
- }
- printf("\n\r");
- }
-
- int main(void)
- {
- GPIO_Config_T GPIO_ConfigStruct;
- USART_Config_T USART_ConfigStruct;
- APM_MINI_LEDInit(LED2);
- RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_USART1));
- GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
- GPIO_ConfigStruct.pin = GPIO_PIN_9;
- GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
- GPIO_Config(GPIOA, &GPIO_ConfigStruct);
- USART_ConfigStruct.baudRate = 115200;
- USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
- USART_ConfigStruct.mode = USART_MODE_TX;
- USART_ConfigStruct.parity = USART_PARITY_NONE;
- USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
- USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
- USART_Config(USART1, &USART_ConfigStruct);
- USART_Enable(USART1);
- while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
- printf("beging\n\r");
- PrintfByteData((uint8_t *)0x08000000,100);
- PrintfHalfWordData((uint16_t *)0x08000000,100);
- PrintfWordData((uint32_t *)0x08000000,100);
-
- while(1)
- {
- }
- }
3 现象3.1 生成的bin文件的数据用于核对显示的数据是否正确 3.2 按照字节形式显示 3.3 按照半字形式显示 3.4 按照字形式显示
|