OpenEdv-开源电子网

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

程序移植修改套用问题

[复制链接]

55

主题

151

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2018-3-12
在线时间
53 小时
发表于 2018-4-17 21:40:19 | 显示全部楼层 |阅读模式
1金钱
背景:我原先使用的是战舰stm32开发平台的stm32f103zet6,并且光盘里面每个实验有配备了SYSTEM文件夹,包含delay,sys,usart,现在我用的是stm32f103c8t6,我需要使用串口,
问题1:zet6的这个SYSTEM文件夹能不能直接被c8t6所用,不能用的话,需要做什么修改呢,有什么注意事项?


///////////////////////    分割线   ////////////////////////////
#include "delay.h"
#include "sys.h"

#if SYSTEM_SUPPORT_UCOS
#include "includes.h"                               
#endif


static u8  fac_us=0;
static u16 fac_ms=0;
#ifdef OS_CRITICAL_METHOD        

void SysTick_Handler(void)
{                                  
        OSIntEnter();       
    OSTimeTick();           
    OSIntExit();      
}
#endif


void delay_init()         
{


#ifdef OS_CRITICAL_METHOD        
        u32 reload;
#endif
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);       
        fac_us=SystemCoreClock/8000000;       
         
#ifdef OS_CRITICAL_METHOD        
        reload=SystemCoreClock/8000000;                  
        reload*=1000000/OS_TICKS_PER_SEC;
                                               
        fac_ms=1000/OS_TICKS_PER_SEC;   
        SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;          
        SysTick->LOAD=reload;        
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;          
#else
        fac_ms=(u16)fac_us*1000;
#endif
}                                                                    

#ifdef OS_CRITICAL_METHOD       
                                                                              
void delay_us(u32 nus)
{               
        u32 ticks;
        u32 told,tnow,tcnt=0;
        u32 reload=SysTick->LOAD;                     
        ticks=nus*fac_us;                                                    
        tcnt=0;
        told=SysTick->VAL;               
        while(1)
        {
                tnow=SysTick->VAL;       
                if(tnow!=told)
                {            
                        if(tnow<told)tcnt+=told-tnow;
                        else tcnt+=reload-tnow+told;            
                        told=tnow;
                        if(tcnt>=ticks)break;
                }  
        };                                                                             
}

void delay_ms(u16 nms)
{       
        if(OSRunning==TRUE)
        {                  
                if(nms>=fac_ms)
                {
                           OSTimeDly(nms/fac_ms);
                }
                nms%=fac_ms;                               
        }
        delay_us((u32)(nms*1000));       
}
#else
                                                                                      
void delay_us(u32 nus)
{               
        u32 temp;                     
        SysTick->LOAD=nus*fac_us;                  
        SysTick->VAL=0x00;      
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;         
        do
        {
                temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;      
        SysTick->VAL =0X00;      
}

void delay_ms(u16 nms)
{                                     
        u32 temp;                  
        SysTick->LOAD=(u32)nms*fac_ms;
        SysTick->VAL =0x00;         
        SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;        
        do
        {
                temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));
        SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;      
        SysTick->VAL =0X00;     
#endif

/////////////////////////////分割线//////////////////////////////////////////////////////////////////

问题2:以上摘自zet6开发板实验文件夹,SYSTEM文件夹里的延时函数,请问想要看懂理解上面的代码的前提是什么?
            我需要看那些资料?针对STM32f103c8t6,我如何写出自己的延时函数?






























最佳答案

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

可以的,啥都不用改, 你换个.s,设置宏定义为STM32F10X_LD,就可以了 。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2018-4-17 21:40:20 | 显示全部楼层
可以的,啥都不用改, 你换个.s,设置宏定义为STM32F10X_LD,就可以了 。
回复

使用道具 举报

55

主题

151

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
304
金钱
304
注册时间
2018-3-12
在线时间
53 小时
 楼主| 发表于 2018-4-24 10:04:13 | 显示全部楼层
c8t6是属于中等容量芯片,宏定义应该是STM32F10X_MD,(stm32开发指南59页下面)
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 04:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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