OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 41833|回复: 11

程序造成cannot access memory的问题

[复制链接]

80

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
531
金钱
531
注册时间
2013-7-4
在线时间
12 小时
发表于 2015-10-20 15:30:05 | 显示全部楼层 |阅读模式
5金钱
我烧写了一段程序造成了芯片无法再次烧写一直提示cannnot access memory或者cannot entry debug mode,最开始我还以为是硬件问题,结果换上一块芯片又是这样,程序很简单,也没有复用jtag引脚怎么会这样呢


main:
[mw_shl_code=c,true]int main(void){ Set_System(); SystemInit(); RCC_init(); GPIO_init(); USB_Interrupts_Config(); usart3_init(); USB_Init(); while(1){ } }[/mw_shl_code]
[mw_shl_code=c,true]Set_System[/mw_shl_code]
[mw_shl_code=c,true]void Set_System(void) { RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if (HSEStartUpStatus == SUCCESS) { /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } } else { while (1) { } } /* enable the PWR clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); }[/mw_shl_code]

[mw_shl_code=c,true]SystemInit,官方system_stm32f10x.c文件中[/mw_shl_code] RCC_init
[mw_shl_code=c,true]void RCC_init(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB|RCC_APB1Periph_USART3, ENABLE); RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5); }[/mw_shl_code]
GPIO_init
[mw_shl_code=c,true]void GPIO_init(void){ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //?à???????ì?? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_15); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //?à?????????? GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_13); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //?à?????????? GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_8); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //×????????ì?? GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_14); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //×??????????? GPIO_Init(GPIOC, &GPIO_InitStructure); GPIO_ResetBits(GPIOC,GPIO_Pin_13); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //test_LED GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,GPIO_Pin_5); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //?à???????ì?? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //usb test GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_SetBits(GPIOA,GPIO_Pin_8); }[/mw_shl_code]

[mw_shl_code=c,true]void USB_Interrupts_Config(void) { NVIC_InitTypeDef NVIC_InitStructure; /* 2 bit for pre-emption priority, 2 bits for subpriority */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /* Enable the USB interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }[/mw_shl_code]

[mw_shl_code=c,true]void usart3_init(void){ GPIO_InitTypeDef GPIO_InitStruct; USART_InitTypeDef USART_InitStruct; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //??IO?±?? GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStruct); // tx GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11; // Rx GPIO_Init(GPIOB, &GPIO_InitStruct); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE);//??USART?±?? USART_InitStruct.USART_BaudRate = 38400; USART_InitStruct.USART_StopBits = USART_StopBits_1; USART_InitStruct.USART_WordLength = USART_WordLength_8b; USART_InitStruct.USART_Parity = USART_Parity_No; USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; USART_Init(USART3, &USART_InitStruct); USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//???????????? USART_Cmd(USART3, ENABLE);//?????®??3 // ?????? NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }[/mw_shl_code]

[mw_shl_code=c,true]void USB_Init(void) { pInformation = &Device_Info; pInformation->ControlState = 2; pProperty = &Device_Property; pUser_Standard_Requests = &User_Standard_Requests; /* Initialize devices one by one */ pProperty->Init(); }[/mw_shl_code]








总体上就那么几个部分,比较不明白的是为什么会出现这种情况,我仔细看了一下代码,可能的原因有2个:一个是 Set_System();SystemInit();两个函数重复的初始化了时钟,另一个是管教初始化重复了(有一段重复了). 我想问一下到底是什么情况会遇到这种问题来注意让以后不要在发生,然后如何修复这个问题?不换新的芯片的话






最佳答案

查看完整内容[请看2#楼]

回复【4楼】正点原子: --------------------------------- 最后找到问题了........换了一个jlink一切正常........ulink能烧写开发板缺不能烧自己的板子........这种疑难杂症也算是嵌入式的一大特色了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

80

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
531
金钱
531
注册时间
2013-7-4
在线时间
12 小时
 楼主| 发表于 2015-10-20 15:30:06 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
最后找到问题了........换了一个jlink一切正常........ulink能烧写开发板缺不能烧自己的板子........这种疑难杂症也算是嵌入式的一大特色了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-10-20 22:39:17 | 显示全部楼层
试试简单的代码,比如跑马灯吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-10-21 21:17:42 | 显示全部楼层
回复【3楼】jimmjimm:
---------------------------------
不能写的时候,B0接3.3V试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-10-22 22:19:27 | 显示全部楼层
回复【5楼】jimmjimm:
---------------------------------
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

19

主题

110

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
257
金钱
257
注册时间
2017-8-2
在线时间
46 小时
发表于 2017-10-9 19:58:01 | 显示全部楼层
留下脚印,等着备用
回复

使用道具 举报

15

主题

118

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3059
金钱
3059
注册时间
2015-12-20
在线时间
299 小时
发表于 2017-12-18 14:08:18 | 显示全部楼层
我也遇到这样的问题
回复

使用道具 举报

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2018-12-10
在线时间
14 小时
发表于 2019-3-13 16:55:45 | 显示全部楼层
楼主 你好 我现在也遇到了 和你一样旳情况
请问这是个是因为程序里面对时钟初始化造成的吗?
这个板子下载过两套程序,其中有套程序是对时钟进行初始化了改变了频率,
我在另一套程序(没有自己写时钟初始化,改变时钟频率)的程序,也是就只能下载一次,就在一下载不了了
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-9-28
在线时间
0 小时
发表于 2019-9-28 08:15:46 | 显示全部楼层
你好 我遇到了和你相似的问题 我也是改变了时钟之后只能下载一次,再也不能下载了。
但是上电单片机程序可以正常运行。
估计您和我一样把系统时钟的频率改的非常慢吧,如果是这样那就差不多对了。
我弄了一个通宵到天亮,用串口ISP下载也没用。最后终于找到问题了。
在仿真器Debug setting 把Max Clock 频率选最小 我这最小能选5kHz。下载非常慢,但是下载flash OK了。
究其原因可能是把系统时钟设置的过低,我用RCL 32k主频, 然后128分频 系统时钟频率才250Hz。估计下载时CPU不能正常工作。
因为复位后虽然是4M主频没错,但一瞬间后 系统时钟直接就128分频了。影响了下载时间CPU工作频率。
那么我就用最慢的5K flash下载时钟。结果就好了。下载的程序是修改后的正常4M主频,就没有问题了。

楼主估计也一样问题。因为也是涉及到了时钟。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
3
金钱
3
注册时间
2019-9-28
在线时间
0 小时
发表于 2019-9-28 08:17:41 | 显示全部楼层
简轩5527 发表于 2019-3-13 16:55
楼主 你好 我现在也遇到了 和你一样旳情况
请问这是个是因为程序里面对时钟初始化造成的吗?
这个板子下 ...

你好 我遇到了和你相似的问题 我也是改变了时钟之后只能下载一次,再也不能下载了。
但是上电单片机程序可以正常运行。
估计您和我一样把系统时钟的频率改的非常慢吧,如果是这样那就差不多对了。
我弄了一个通宵到天亮,用串口ISP下载也没用。最后终于找到问题了。
在仿真器Debug setting 把Max Clock 频率选最小 我这最小能选5kHz。下载非常慢,但是下载flash OK了。
究其原因可能是把系统时钟设置的过低,我用RCL 32k主频, 然后128分频 系统时钟频率才250Hz。估计下载时CPU不能正常工作。
因为复位后虽然是4M主频没错,但一瞬间后 系统时钟直接就128分频了。影响了下载时间CPU工作频率。
那么我就用最慢的5K flash下载时钟。结果就好了。下载的程序是修改后的正常4M主频,就没有问题了。

楼主估计也一样问题。因为也是涉及到了时钟。
回复

使用道具 举报

4

主题

59

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
367
金钱
367
注册时间
2016-8-29
在线时间
128 小时
发表于 2020-3-6 14:17:03 | 显示全部楼层
crusdy 发表于 2019-9-28 08:15
你好 我遇到了和你相似的问题 我也是改变了时钟之后只能下载一次,再也不能下载了。
但是上电单片机程序可 ...

666666
回复

使用道具 举报

7

主题

47

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2019-2-17
在线时间
10 小时
发表于 2021-5-18 14:29:40 | 显示全部楼层
到了今天,我也遇到问题了,然后上面这些方法都行不通。提示“cannot access memory”
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
6
金钱
6
注册时间
2022-4-23
在线时间
1 小时
发表于 2022-9-15 18:38:44 | 显示全部楼层
这么巧,我也遇到这个问题了,还没解决,mark一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 04:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表