qemu 模拟stm32f103RB uart && system tick

QEMU emulator version 5.1.0

stm32 code:

#include <stdio.h>               
#include <stm32f10x.h>           

#include <string.h>   

extern void SER_Init(void);    


static __IO uint32_t TimingDelay;
void Delay(__IO uint32_t nTime)

   TimingDelay = nTime;
   while(TimingDelay != 0);
}


void SysTick_Handler( void )   
{   
    if( TimingDelay != 0x00 ){ 
        TimingDelay--;
    }
}

int init_system_tick( void )
{
    printf( "SystemCoreClock = %d\n", SystemCoreClock );
    if( SysTick_Config(SystemCoreClock / 1000) ){
        printf("SysTick_Config fail!!!\n");
        return -1;
    }
    return 0x00;
}

int main( void )  
{
    const char *a = "Hello world!";
    char b[20];
    char input_char; 
      
    SER_Init();
    printf("test a shell src code...\n");
    init_system_tick();
    while( 1 ){ 
      Delay(1000);     
      printf("in tick!!!\n");
    }
    //start_edit();    
    while(1){
      //input_char = getchar();
      //printf("input char = %x\n", input_char);
    }
    return 0;
}

keil4.72.0.0 设置输出 bin asm

#K\ARM\ARMCC\bin\fromelf.exe --bin -o #L.bin #L

#K\ARM\ARMCC\bin\fromelf.exe --text -c -o "$L@L.asm" "#L"

运行指令:

../../fuck_mips/qemu5p1/qemu-5.1.0/arm-softmmu/qemu-system-arm -M netduino2 -kernel Hello.axf.bin -nographic
104005@1693665608.182837:nvic_sysreg_write NVIC sysreg write addr 0xd08 data 0x8000000 size 4
test a shell src code...
SystemCoreClock = 72000000
104005@1693665608.183994:nvic_sysreg_write NVIC sysreg write addr 0xd23 data 0xf0 size 1
in tick!!!
in tick!!!
in tick!!!
in tick!!!
in tick!!!

ctrl+a    x 

quit

附加说明:qemu修改点:

static const uint32_t usart_addrxx[STM_NUM_USARTS] = { 0x40011000, 0x40004400,
    0x40004800, 0x40004C00, 0x40005000, 0x40011400 };

static const uint32_t usart_addr[STM_NUM_USARTS] = { 0x40013800, 0x40004400,
    0x40004800, 0x40004C00, 0x40005000, 0x40011400 };

in file -->  hw/arm/stm32f205_soc.c

因为keil中的代码模拟的是stm32f103,其串口的基地址为 0x40013800,需要修改

其实就是用 103的bin文件,qemu用的模拟器是205的。system tick属于芯片核里面的,估计寄存器地址一样。实际效果是出来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值