This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123GH6PM:请帮助

Guru**** 2511985 points
Other Parts Discussed in Thread: TM4C123GH6PM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1359328/tm4c123gh6pm-please-help

器件型号:TM4C123GH6PM

我为 EEPROM 制作了一个小驱动程序作为驱动程序在 GitHub 上不工作它给了我3错误未定义的符号 SysctlDelay ,,, 未定义的符号 Sysctlperipheralreset ,,,,,,,, 未定义的符号 main

因此、我制作了自己的驱动程序、但在 Keil 上运行代码时出现了问题。EEPROM 基址寄存器和偏移寄存器始终指向同一存储器部分、这意味着、当我在寄存器 EEDRW 上写入时、它会改变并存储在存储器中 位置,但是当我在递增偏移和阻塞后重写它时,它不会更改内存部分,然后它会重写旧数据。这里是一份 mt 测试代码的副本。注意,有许多硬编码部分,因为 iam 测试注意:aslo i 在 Keil 中从模拟器中打开 systejm 查看器存储器1中的存储器                          

#include "tm4c123gh6p.h"
#包含
#define EE 0x00000
volatile uint32_t * hwreg_ptr;

空延迟(uint32_t n){
while (n>0){
N--;




void eeprom_wait_for_write (void){
while (EEPROM_EEDONE_R!=0x00);



void eeprom_wait_for_done (void){
while (EEPROM_EEDONE_R!=0x0);

uint32_t EEPROM_Init (){
延迟(6);
SYSCTL_RCGCEEPROM_R |= 0x01;
eeprom_wait_for_done();
while ((EEPROM_EESUPP_R 和0x0C)!= 0)
{
返回(-1);

SYSCTL_SREEPROM_R |= 0x01 ;
延迟(6);
while ((EEPROM_EESUPP_R 和0x0C)!= 0)
{
返回(-1);

eeprom_wait_for_done();
while ((EEPROM_EESUPP_R 和0x0C)!= 0)
{
返回(-1);


返回0;

void EEPROM_Write (char *数据、uint32_t 地址、uint32_t 字节)
{

uint32_t block= 0;
uint32_t offset =地址% 4;
uint32_t i;
uint32_t k = 0;
uint32_t 字=字节/4;
uint32_t Byte_Num = 4;
EEPROM_EEOFFSET_R =8;
EEPROM_EEBLOCK_R = 8;
EEPROM_EERDWR_R = EE;
for (i = 0;i <单词;i++){
if (offset =16)
{block ++;
偏移= 0;

for (k=0;k <= 3;k++)
{
EEPROM_EERDWR_R |= data[k];
延迟(10);
eeprom_wait_for_write ();
if (k!=(Byte_Num - 1)){
EEPROM_EERDWR_R = EEPROM_EERDWR_R<< 8;


eeprom_wait_for_write ();
偏移++;
EEPROM_EEOFFSET_R =偏移;


// 0x400A0000、0x400FFFFF


eeprom_wait_for_done();
延迟(10);


int main ()
{

uint32_t x = 0x400AFA12;
char myString[]="ABF";
EEPROM_Init();

EEPROM_Write (myString、x、8);
EEPROM_EERDWR_R = EE;
while (1){}

那么、您能帮我解决我使用 tm4c123gh6pm 时遇到的两个问题中的一个吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     您不使用 TivaWare SDK 有没有任何强大的原因?TivaWare SDK 是一款经实践检验的用于简化软件开发的库和工具套件? 请从 https://www.ti.com/tool/SW-TM4C 下载最新的 TivaWare。 我建议您运行一个像 hello 或 blinky 这样的简单示例来熟悉 SDK。 出现此错误是由于缺少头文件、如果您使用 TivaWare 示例、将对其进行处理。 您需要为要在应用程序中使用的模块添加#include。 例如、SysCtlDelay 是属于 SysCtl 模块的函数。 您将需要按如下所示包含头文件。  

    #include "driverlib/sysctl.h"

      

    uint32_t ui32EEPROMInit;
    uint32_t pui32Data[2];
    uint32_t pui32Read[2];
    //
    // Enable the EEPROM module.
    //
    SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0);
    //
    // Wait for the EEPROM module to be ready.
    //
    while(!SysCtlPeripheralReady(SYSCTL_PERIPH_EEPROM0))
    {
    }
    //
    // Wait for the EEPROM Initialization to complete
    //
    ui32EEPROMInit = EEPROMInit();
    //
    // Check if the EEPROM Initialization returned an error
    // and inform the application
    //
    if(ui32EEPROMInit != EEPROM_INIT_OK)
    {
    while(1)
    {
    }
    }
    //
    // Program some data into the EEPROM at address 0x400.
    //
    pui32Data[0] = 0x12345678;
    pui32Data[1] = 0x56789abc;
    EEPROMProgram(pui32Data, 0x400, sizeof(pui32Data));
    //
    // Read it back.
    //
    EEPROMRead(pui32Read, 0x400, sizeof(pui32Read));

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的,谢谢你这么多工作,但我有一个小问题,我希望它是一个双精度数组,而不是无符号整数数数数数数数组。这是我的代码必须的,所以你能帮助我在奉献, EEPROM 驱动程序中的函数使用无符号 intgers 数组(写函数和读函数)。