你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
IAR 软件问题----- 在线调试,软件端不显示flash内写入的数.....
[复制链接]
▲-猪-▼Ψ
提问时间:2016-11-26 23:58 /
本帖最后由 ▲-猪-▼Ψ 于 2016-11-27 18:04 编辑
用IAR调试软件,写入寄存器的数据,无法在IAR软件的界面上查询到,请问,是我的设置问题,还是哪里出了问题?
赞
0
收藏
2
评论
18
分享
发布时间:2016-11-26 23:58
举报
请先
登录
后回复
18个回答
wenyangzeng
回答时间:2017-1-26 07:55:30
a0a.1 32b0c
本帖最后由 wenyangzeng 于 2017-1-27 07:38 编辑
IAR查看寄存器应该是这样
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
0
反对
1
▲-猪-▼Ψ
回答时间:2016-11-27 00:11:15
a0a.1 32b0c
本帖最后由 ▲-猪-▼Ψ 于 2016-11-27 00:16 编辑
我自己的flash 内容用串口输出的代码如下
/**
******************************************************************************
* @file FLASH
* @author
* @version
* @date
* @brief 要求程序可对MCU的内部Flash页进行擦除,
可写入固定数量的数据,并可将写入的数据读出。
要求读出的数据与写入的数据内容必须一致。
擦除后,写,用串口输出flash数据
0x080000000 - 0x0800FFFF 64K flash
0x080800000 - 0x080107FF 2K EEPROM
1PAGE = 128 byte
1sector(0-15) = 32page (0-31)
7s可以完成写数据和读数据,校验数据
******************************************************************************
*/
#include "main.h"
#define FLASH_USER_START_ADDR 0x08008000 /* flash起始地址 */
#define FLASH_USER_END_ADDR 0x0800A000 /* flash终止地址 */
uint8_t DATA_32[] = "STM32LO53C8";
int i =0;
uint32_t FirstPage = 0, NbOfPages = 0, Address = 0;
uint32_t PageError = 0;
__IO uint32_t data32 = 0 , MemoryProgramStatus = 0;
static FLASH_EraseInitTypeDef EraseInitStruct;
UART_HandleTypeDef UartHandle;
__IO ITStatus UartReady = RESET;
uint8_t aTxBuffer[] = " THIS IS TRUE ";
uint32_t BUFFER_data;
uint8_t aRxBuffer[RXBUFFERSIZE];
static void SystemClock_Config(void);
static void Error_Handler(void);
void UART_INT(void);
int main(void)
{
HAL_Init();
BSP_LED_Init(LED3);
SystemClock_Config();
UART_INT();
HAL_FLASH_Unlock();
NbOfPages = (FLASH_USER_END_ADDR - FLASH_USER_START_ADDR + 1) >> 7;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = FLASH_USER_START_ADDR;
EraseInitStruct.NbPages = NbOfPages;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
{
Error_Handler();
}
Address = FLASH_USER_START_ADDR;
while (Address < FLASH_USER_END_ADDR)
{
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address , (uint32_t)DATA_32) == HAL_OK)
{
Address = Address + 4;
}
else
{
Error_Handler();
}
}
HAL_FLASH_Lock();
/* 变量 MemoryProgramStatus = 0: 数据正确
MemoryProgramStatus != 0: 数据错误 ******/
Address = FLASH_USER_START_ADDR;
MemoryProgramStatus = 0x0;
BUFFER_data= *(__IO uint32_t*)(0x8008000);
if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)BUFFER_data, 11)!= HAL_OK)
{
Error_Handler();
}
while (Address < FLASH_USER_END_ADDR)
{
data32 = *(__IO uint32_t*)Address;
if (data32 != (uint32_t)DATA_32)
{
MemoryProgramStatus++;
}
Address = Address + 4;
}
if (MemoryProgramStatus == 0)
{
BSP_LED_On(LED3);
UART_INT();
if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)
{
Error_Handler();
}
}
else
{
Error_Handler();
}
while (1)
{
}
}
赞
0
评论
回复
支持
反对
酱哒哒
回答时间:2017-1-28 11:17:01
a0a.1 32b0c
1.很明显和IAR软件设置有关,如果你没有更改过什么东西的话,08000000放置的应该是vector table,我看你图中FLASH地址没有vector table。
2.你在里面说实验硬件现象无误,是指的能够利用串口输出正确数据的意思么?
3.IAR肯定是能够这么查询FLASH值的,唯一和FLASH设置有关的地方在IAR里面就只有这儿
不勾选override ,就是默认的IAR自带的对应CPU的FLASH和SRAM地址配置ICF文件(ICF文件好像是IAR自己弄得个存储地址配置文件,功能很强大,IAR出过相关的讲解资料,有兴趣可以去看看)。勾选了就可以看看地址配置区间
上图就是vector table放置地址,这个涉及到STM32芯片启动过程,具体可以搜索相关信息阅读,没有更改,VECTOR TABLE肯定在这儿
上图是ROM(FLASH)和RAM(内部SRAM)配置区间,可以看看对不对
图中横排最后一个选项stack/heap是堆栈分配配置空间(堆栈概念,不知道百度,这涉及到编程中各种东西存储分区),IAR与GCC不一样,IAR在开发前需要预先分配堆栈空间(RAM),分配了,后面程序就不能调用对应空间(一般足够就可以)。GCC是程序如果要用一些RAM,那么用剩下的所有RAM都自动作为堆栈空间(孰优孰劣,不好说)
IAR中涉及存储设置的地方就好像只有这儿。我刚才新配了一个空白工程,用simulator调试看了下,FLASH地址中肯定会有VECTOR TABLE的,你再看看是哪的问题吧!
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
▲-猪-▼Ψ
回答时间:2016-11-27 00:03:31
a0a.1 32b0c
我已经写数据了,向stm32L053 内部flash ,并且用地址指针直接读取flash数据,再用串口输出flash地址的数据,flash地址是0x0800 0000到0x0800ffff , 64K没有超出地址。
实验硬件现象无错误,
但是为什么IAR软件调出flash内容列表,却不出现我写进去的数据呢?
赞
0
评论
回复
支持
反对
▲-猪-▼Ψ
回答时间:2016-11-27 00:07:36
a0a.1 32b0c
我查询其他内存数据时,是这个情况
赞
0
评论
回复
支持
反对
▲-猪-▼Ψ
回答时间:2016-11-27 00:20:18
a0a.1 32b0c
求IAR软件具体设置步骤,我的两台电脑都是无法用IAR软件显示内存里面具体的数据值,可能不是我的软件安装错误, 但是软件既然设计了这个功能,怎么可能荒废掉呢???求解决详细方法!
备注:我的IAR是7.2版本的,,
赞
0
评论
回复
支持
反对
▲-猪-▼Ψ
回答时间:2016-11-28 09:00:35
a8a.1 32b0c
没有人喜欢这么查询吗?
赞
0
评论
回复
支持
反对
peter001
回答时间:2016-11-28 11:43:14
a0a.1 32b0c
帮顶,估计没写入
赞
0
评论
回复
支持
反对
▲-猪-▼Ψ
回答时间:2016-11-28 12:21:40
a8a.1 32b0c
peter001 发表于 2016-11-28 11:43
帮顶,估计没写入
我串口取的地址指针,就是flash的地址啊,是我的串口指针书写方式不对吗?
赞
0
评论
回复
支持
反对
队长shiwo
回答时间:2017-1-26 09:04:48
a0a.1 32b0c
是不是被覆盖掉了的啊
赞
0
评论
回复
支持
反对
shuolang126
回答时间:2017-1-26 09:08:41
a0a.1 32b0c
没有用过,帮顶一下
赞
0
评论
回复
支持
反对
zoomdy
回答时间:2017-1-26 09:56:44
a0a.1 32b0c
你的IAR是什么版本?我用7.80.3,NUCLEO-L053R8,试了一下,能正常访问,反汇编也正常。如果Read Out Protection设置成Level 1,那没法调试。
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
zbber
回答时间:2017-1-26 11:43:15
a0a.1 32b0c
是不是被覆盖掉了的啊
赞
0
评论
回复
支持
反对
anywill
回答时间:2017-1-26 11:50:32
a0a.1 32b0c
建议你换7.8的试试,
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
七哥
回答时间:2017-1-26 21:25:14
a0a.1 32b0c
IAR没用过,Keil MDK下4G地址范围内随便查看。看你的样子,连RAM空间都无法显示呀,这不科学呀。
还是说说你的实验环境吧,硬件仿真,还是软件仿真,仿真器用的什么?
评分
参与人数
1
ST金币
+2
收起
理由
zero99
+ 2
查看全部评分
赞
0
评论
回复
支持
反对
1
2
/ 2 页
下一页
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
IAR查看寄存器应该是这样
评分
查看全部评分
我自己的flash 内容用串口输出的代码如下
/**
******************************************************************************
* @file FLASH
* @author
* @version
* @date
* @brief 要求程序可对MCU的内部Flash页进行擦除,
可写入固定数量的数据,并可将写入的数据读出。
要求读出的数据与写入的数据内容必须一致。
擦除后,写,用串口输出flash数据
0x080000000 - 0x0800FFFF 64K flash
0x080800000 - 0x080107FF 2K EEPROM
1PAGE = 128 byte
1sector(0-15) = 32page (0-31)
7s可以完成写数据和读数据,校验数据
******************************************************************************
*/
#include "main.h"
#define FLASH_USER_START_ADDR 0x08008000 /* flash起始地址 */
#define FLASH_USER_END_ADDR 0x0800A000 /* flash终止地址 */
uint8_t DATA_32[] = "STM32LO53C8";
int i =0;
uint32_t FirstPage = 0, NbOfPages = 0, Address = 0;
uint32_t PageError = 0;
__IO uint32_t data32 = 0 , MemoryProgramStatus = 0;
static FLASH_EraseInitTypeDef EraseInitStruct;
UART_HandleTypeDef UartHandle;
__IO ITStatus UartReady = RESET;
uint8_t aTxBuffer[] = " THIS IS TRUE ";
uint32_t BUFFER_data;
uint8_t aRxBuffer[RXBUFFERSIZE];
static void SystemClock_Config(void);
static void Error_Handler(void);
void UART_INT(void);
int main(void)
{
HAL_Init();
BSP_LED_Init(LED3);
SystemClock_Config();
UART_INT();
HAL_FLASH_Unlock();
NbOfPages = (FLASH_USER_END_ADDR - FLASH_USER_START_ADDR + 1) >> 7;
EraseInitStruct.TypeErase = FLASH_TYPEERASE_PAGES;
EraseInitStruct.PageAddress = FLASH_USER_START_ADDR;
EraseInitStruct.NbPages = NbOfPages;
if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)
{
Error_Handler();
}
Address = FLASH_USER_START_ADDR;
while (Address < FLASH_USER_END_ADDR)
{
if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, Address , (uint32_t)DATA_32) == HAL_OK)
{
Address = Address + 4;
}
else
{
Error_Handler();
}
}
HAL_FLASH_Lock();
/* 变量 MemoryProgramStatus = 0: 数据正确
MemoryProgramStatus != 0: 数据错误 ******/
Address = FLASH_USER_START_ADDR;
MemoryProgramStatus = 0x0;
BUFFER_data= *(__IO uint32_t*)(0x8008000);
if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)BUFFER_data, 11)!= HAL_OK)
{
Error_Handler();
}
while (Address < FLASH_USER_END_ADDR)
{
data32 = *(__IO uint32_t*)Address;
if (data32 != (uint32_t)DATA_32)
{
MemoryProgramStatus++;
}
Address = Address + 4;
}
if (MemoryProgramStatus == 0)
{
BSP_LED_On(LED3);
UART_INT();
if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)
{
Error_Handler();
}
}
else
{
Error_Handler();
}
while (1)
{
}
}
2.你在里面说实验硬件现象无误,是指的能够利用串口输出正确数据的意思么?
3.IAR肯定是能够这么查询FLASH值的,唯一和FLASH设置有关的地方在IAR里面就只有这儿
评分
查看全部评分
实验硬件现象无错误,
但是为什么IAR软件调出flash内容列表,却不出现我写进去的数据呢?
备注:我的IAR是7.2版本的,,
我串口取的地址指针,就是flash的地址啊,是我的串口指针书写方式不对吗?
评分
查看全部评分
评分
查看全部评分
还是说说你的实验环境吧,硬件仿真,还是软件仿真,仿真器用的什么?
评分
查看全部评分