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

[复制链接]
 楼主| zjh20070904 发表于 2022-6-13 19:42 | 显示全部楼层 |阅读模式

1 概述
在实际应用中,为了分析Flash中的数据,需要读取并通过串口显示数据,根据实际应用场景规则整齐地按照8位、16位、32位读取并显示Flash数据会非常提高分析效率。
下面总结了实际应用中按照8位、16位、32位读取并在串口软件中显示Flash数据的代码及现象。
代码仅供参数使用。
2 代码
  1. #include "main.h"
  2. #include "stdio.h"

  3. //重定向c库函数printf到串口,重定向后可使用printf函数
  4. int fputc(int ch, FILE *f)
  5. {
  6.         USART_TxData(USART1, (char) ch);
  7.         while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
  8.         return (ch);
  9. }

  10. //重定向c库函数scanf到串口,重写向后可使用scanf、getchar等函数
  11. int fgetc(FILE *f)
  12. {
  13.         while (USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET);
  14.         return (int)USART_RxData(USART1);
  15. }


  16. void PrintfByteData(uint8_t *p_data_addr,uint32_t data_num)
  17. {
  18.    
  19.     uint32_t i=0,j=0;
  20.    
  21.     printf("            ");
  22.     for(i=0;i<16;i++)
  23.     {
  24.         printf("%X    ",i);
  25.     }
  26.     printf("\n\r");
  27.     for(i=0;i<data_num;i++)
  28.         {
  29.         if(j%16==0)
  30. {printf("0x%08X: 0x%02X ",&p_data_addr[i],p_data_addr[i]);}
  31.         else if((j+1)%16==0)                       
  32.             {printf("0x%02X\n\r",p_data_addr[i]);}
  33.         else
  34.             {printf("0x%02X ",p_data_addr[i]);}               
  35.         j++;
  36.         }
  37.     printf("\n\r");   
  38. }




  39. void PrintfHalfWordData(uint16_t *p_data_addr,uint32_t data_num)
  40. {
  41.     uint32_t i=0,j=0;
  42.    
  43.     printf("            ");
  44.     for(i=0;i<8;i++)
  45.     {
  46.         printf("%X      ",i*2);
  47.         
  48.     }
  49.     printf("\n\r");
  50.     for(i=0;i<data_num;i++)
  51.         {
  52.         if(j%8==0)
  53.             {printf("0x%08X: 0x%04X ",&p_data_addr[i],p_data_addr[i]);}
  54.         else if((j+1)%8==0)                       
  55.             {printf("0x%04X\n\r",p_data_addr[i]);}
  56.         else
  57.             {printf("0x%04X ",p_data_addr[i]);}               
  58.         j++;
  59.         }
  60.     printf("\n\r");   
  61. }


  62. void PrintfWordData(uint32_t *p_data_addr,uint32_t data_num)
  63. {
  64.     uint32_t i=0,j=0;
  65.    
  66.     printf("            ");
  67.     for(i=0;i<4;i++)
  68.     {
  69.         printf("%X          ",i*4);
  70.         
  71.     }
  72.     printf("\n\r");
  73.     for(i=0;i<data_num;i++)
  74.         {
  75.         if(j%4==0)
  76.             {printf("0x%08X: 0x%08X ",&p_data_addr[i],p_data_addr[i]);}
  77.         else if((j+1)%4==0)                       
  78.             {printf("0x%08X\n\r",p_data_addr[i]);}
  79.         else
  80.             {printf("0x%08X ",p_data_addr[i]);}               
  81.         j++;
  82.         }
  83.     printf("\n\r");   
  84. }


  85. int main(void)
  86. {
  87.     GPIO_Config_T GPIO_ConfigStruct;
  88.     USART_Config_T USART_ConfigStruct;

  89.     APM_MINI_LEDInit(LED2);

  90.     RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_USART1));

  91.     GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
  92.     GPIO_ConfigStruct.pin = GPIO_PIN_9;
  93.     GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
  94.     GPIO_Config(GPIOA, &GPIO_ConfigStruct);

  95.     USART_ConfigStruct.baudRate = 115200;
  96.     USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
  97.     USART_ConfigStruct.mode = USART_MODE_TX;
  98.     USART_ConfigStruct.parity = USART_PARITY_NONE;
  99.     USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
  100.     USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
  101.     USART_Config(USART1, &USART_ConfigStruct);

  102.     USART_Enable(USART1);
  103.         while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);

  104.         printf("beging\n\r");
  105.         PrintfByteData((uint8_t *)0x08000000,100);
  106.         PrintfHalfWordData((uint16_t *)0x08000000,100);
  107.         PrintfWordData((uint32_t *)0x08000000,100);
  108.        
  109.     while(1)
  110.     {

  111.     }
  112. }

3 现象3.1 生成的bin文件的数据
用于核对显示的数据是否正确
                              
1.png
3.2 按照字节形式显示
2.png
3.3 按照半字形式显示
3.png
3.4 按照字形式显示
4.png



Fanexs168 发表于 2022-6-13 23:06 | 显示全部楼层
顶一下,强迫症舒适了

评论

[抱拳][抱拳]  发表于 2022-6-24 15:40
modesty3jonah 发表于 2022-6-20 15:36 | 显示全部楼层
这个是怎么划分的区域?
bestwell 发表于 2022-6-20 16:41 | 显示全部楼层
APM32F103ZE 读写保护可以解除吗  

评论

可以啊,可以通过ISP软件修改选项字节解除读写保护  发表于 2022-6-24 15:39
belindagraham 发表于 2022-6-20 17:04 | 显示全部楼层
APM32F103ZE性能怎么样  

评论

看和谁比喽,现在市场好有好多xxF103的  发表于 2022-6-24 15:38
tifmill 发表于 2022-6-20 18:33 | 显示全部楼层
APM32F103ZE多大的flash呢?

评论

512KB  发表于 2022-6-24 15:36
mollylawrence 发表于 2022-6-20 19:32 | 显示全部楼层
都支持哪些芯片呢   

评论

都可以吧,其实和芯片没啥关系,是纯粹的C代码  发表于 2022-6-24 15:36
gouguoccc 发表于 2022-6-20 19:42 来自手机 | 显示全部楼层
就是格式化处理的问题

评论

是的、是的,显示整齐、好看一点点  发表于 2022-6-24 15:35
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:极海半导体
简介:珠海极海半导体有限公司是一家致力于开发工业级/车规级微控制器、模拟与混合信号IC及系统级芯片的集成电路设计型企业。极海团队拥有20年集成电路设计经验和嵌入式系统开发能力,可为客户提供核心可靠的芯片产品及方案,实现准确感应、安全传输和实时控制,助力客户在智慧家居、高端消费电子、工业控制、汽车电子、智慧能源以及通信设施等领域的拓展创新。

29

主题

68

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部