zjh20070904 发表于 2022-6-13 19:42

使用串口整齐、漂亮地显示APM32F103ZE Flash的数据


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,p_data_addr);}
      else if((j+1)%16==0)                       
            {printf("0x%02X\n\r",p_data_addr);}
      else
            {printf("0x%02X ",p_data_addr);}               
      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,p_data_addr);}
      else if((j+1)%8==0)                       
            {printf("0x%04X\n\r",p_data_addr);}
      else
            {printf("0x%04X ",p_data_addr);}               
      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,p_data_addr);}
      else if((j+1)%4==0)                       
            {printf("0x%08X\n\r",p_data_addr);}
      else
            {printf("0x%08X ",p_data_addr);}               
      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 按照字形式显示


Fanexs168 发表于 2022-6-13 23:06

顶一下,强迫症舒适了

modesty3jonah 发表于 2022-6-20 15:36

这个是怎么划分的区域?

bestwell 发表于 2022-6-20 16:41

APM32F103ZE 读写保护可以解除吗

belindagraham 发表于 2022-6-20 17:04

APM32F103ZE性能怎么样

tifmill 发表于 2022-6-20 18:33

APM32F103ZE多大的flash呢?

mollylawrence 发表于 2022-6-20 19:32

都支持哪些芯片呢   

gouguoccc 发表于 2022-6-20 19:42

就是格式化处理的问题

touser 发表于 2022-6-20 20:41

hex显示好难。

saservice 发表于 2022-6-21 20:24

APM32F103跟stm32F103兼容吗

zjh20070904 发表于 2022-6-24 15:34

saservice 发表于 2022-6-21 20:24
APM32F103跟stm32F103兼容吗

拿野火的STM32F103代码烧录过,可以正常运行

geraldbetty 发表于 2022-7-4 16:54

感觉看着好复杂。

weifeng90 发表于 2022-7-5 07:59

学习了,谢谢楼主分享经验。

两只袜子 发表于 2022-7-5 15:06

这个数据看着极度舒适

cehuafan 发表于 2022-7-5 16:10

能换行吗   

plsbackup 发表于 2022-7-5 16:50

不然字符串直观。   

quickman 发表于 2022-7-5 17:32

为什么显示flash的数据呢   

1988020566 发表于 2022-7-5 18:11

这个看着舒服多了。

hilahope 发表于 2022-7-5 19:01

hex显示的吗   

chenqianqian 发表于 2022-7-5 20:26

可以使用开源shell
页: [1] 2
查看完整版本: 使用串口整齐、漂亮地显示APM32F103ZE Flash的数据