你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
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的地址啊,是我的串口指针书写方式不对吗?
评分
查看全部评分
评分
查看全部评分
还是说说你的实验环境吧,硬件仿真,还是软件仿真,仿真器用的什么?
评分
查看全部评分