请选择 进入手机版 | 继续访问电脑版
查看: 1827|回复: 3

[求助] keazn64 读写完EEPROM 串口发送数据 进入 HardFault

[复制链接]

该用户从未签到

3

主题

23

帖子

0

注册会员

Rank: 2

积分
164
最后登录
2021-10-7
发表于 2021-9-10 09:55:09 | 显示全部楼层 |阅读模式
本帖最后由 功夫崽崽 于 2021-9-10 09:56 编辑

int main(void)
{
      uint8_t eBuf[EEPROM_SIZE];

      Bsp_Init();
   
      GetChipUniqueID();
   
      memset(eBuf,0x5A,sizeof(eBuf));
      mFLASH_Init(16000000);
      mEEPROM_EraseOneSector(EEPROM_SIZE);
      mEEPROM_Program(EEPROM_START_ADDRESS,&eBuf[0],EEPROM_SIZE);
      memset(eBuf,0x00,sizeof(eBuf));
      mEEPROM_Read(0,&eBuf[0],EEPROM_SIZE);
   
        printf("Usart0 Send Hello kea ! \r\n");               //程序执行到这里 死机  putchar 如下

        /*
        PUTCHAR_PROTOTYPE
        {
            USART0_SendData((uint8_t) ch);            //串口发送函数如下
           /*
           void USART0_SendData(uint8_t dat)
           {
                while (!(UART0->S1 & 0x80));
                UART0->D = (uint8_t) dat;
           }

          */
           return ch;
        }  

        */

   
        while(1)
        {
          ;
        }
}

观察 串口调试助手  能接收到两个字节 “Us” 后程序就 进入 “HardFault” 中断。
EEPROM  参照官方 demo  及“https://www.nxpic.org.cn/module/ ... xtra=page%3D&page=1” 此帖。





最佳答案

楼主你好 请问如果不操作EEPROM,单独调用printf("Usart0 Send Hello kea ! \r\n"); 是否会触发HardFault?
回复

使用道具 举报

该用户从未签到

3

主题

23

帖子

0

注册会员

Rank: 2

积分
164
最后登录
2021-10-7
 楼主| 发表于 2021-9-10 10:20:02 | 显示全部楼层
串口配置
void USART0_Init(void)
{
       uint32_t baudTemph,baudTempl;
       
        SIM->SCGC         |= 0x00100000;                //Enable bus clock in UART0
        SIM->PINSEL      |= 0x00000080;         //=1 UART0_RX and TX are mapped on PTA2 and PTA3.
       
        UART0->BDH         &= ~0x20;                //One stop        
        //UART baud rate equals BUSCLK/(16×BR).
        baudTemph   = BUSCLOCK;
        baudTemph >>= 4;
        baudTemph  /= 9600;
        baudTempl   = baudTemph;
       
        baudTemph  &= 0x1FFF;
        baudTemph >>= 8;
        UART0->BDH &= 0xE0;                            //clear baud_h
        UART0->BDH |= (uint8_t)  baudTemph;
        UART0->BDL  = (uint8_t) (baudTempl & 0x00FF);
       
        UART0->C1   = 0;                                  /* No parity enable,8 bit format*/
        UART0->C2  |= 0x08;                             /* Enable Transmitter*/
        UART0->C2  |= 0x04;                             /* Enable Receiver   */
        UART0->C2  |= 0x20;                             /* Enable Receiver interrupts*/

        NVIC_ClearPendingIRQ(UART0_IRQn);              /* Clear any Pending IRQ for all UART0_IRQn  (#23) */
        NVIC_EnableIRQ(UART0_IRQn);                    /* Set Enable IRQ for UART0 */
        NVIC_SetPriority(UART0_IRQn,0);                /* Set Priority for UART0 */         
}
回复 支持 反对

使用道具 举报

该用户从未签到

688

主题

6346

帖子

0

超级版主

Rank: 8Rank: 8

积分
22382
最后登录
2024-12-9
发表于 2021-9-14 18:37:53 | 显示全部楼层
楼主你好
请问如果不操作EEPROM,单独调用printf("Usart0 Send Hello kea ! \r\n"); 是否会触发HardFault?
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

23

帖子

0

注册会员

Rank: 2

积分
164
最后登录
2021-10-7
 楼主| 发表于 2021-9-15 07:55:49 | 显示全部楼层
小恩GG 发表于 2021-9-14 18:37
楼主你好
请问如果不操作EEPROM,单独调用printf("Usart0 Send Hello kea ! \r\n"); 是否会触发HardFault? ...

单独printf 没有问题,是堆栈溢出了,操作eeprom 开了一个 256Byte的数组,   修改启动文件堆栈的空间好了。  谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2024-12-12 16:40 , Processed in 0.120340 second(s), 24 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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