你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 11564|回复: 43

【STM32F030开发日志】+通用电动车行驶状态监测仪

[复制链接]

4

主题

36

回帖

0

蝴蝶豆

中级会员

最后登录
2019-11-19
发表于 2014-1-13 12:03:01 | 显示全部楼层 |阅读模式
 由于最近比较忙,所以在收到板子一个多月后才来评测,在此向与非网说声抱歉!
这个项目是本人在大学里的一个课程设计,采用了STM32F0 Discovery探索板作为控制核心,实现通用电动车在行驶过程中的速度检测、行驶里程的计算以及电动车电瓶的剩余电量值,并根据剩余电量值预报电动车的剩余行驶里程,然后通过人机交互界面进行参数的实时显示。在设计工程中主要完成了电源电路设计,微处理器基本工作电路设计,光电门为传感器的行驶速度和行驶里程检测电路设计,基于A/D转换的电瓶电量检测电路,实时时钟电路设计,按键及TFT LCD液晶显示电路设计。最后,在硬件系统上通过软件编程实现了部分设计的验证。
废话不多说,直接上代码:
系统时钟初始化函数SystemInit();自带的系统初始化函数
void SystemInit (void)
{    
  RCC->CR |= (uint32_t)0x00000001;
  RCC->CFGR &= (uint32_t)0xF8FFB80C;
  RCC->CR &= (uint32_t)0xFEF6FFFF;
  RCC->CR &= (uint32_t)0xFFFBFFFF;
  RCC->CFGR &= (uint32_t)0xFFC0FFFF;
  RCC->CFGR2 &= (uint32_t)0xFFFFFFF0;
  RCC->CFGR3 &= (uint32_t)0xFFFFFEAC;
  RCC->CR2 &= (uint32_t)0xFFFFFFFE;
 
  RCC->CIR = 0x00000000;
 
   SetSysClock();
}
 
 
系统延时初始化函数delay_init()(注,移植于正点原子的开发板例程)
void delay_init()         
{
                SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
                fac_us=SystemCoreClock/8000000;       
                fac_ms=(int16_t)fac_us*1000;
}       
LED灯初始化函数LED_Init()
    void LED_Init()
    {
                  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
                  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
                  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
                  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
                  GPIO_Init(GPIOC, &GPIO_InitStructure);
                  led_off(LED3|LED4);
}
按键初始化函数KEY_Init(void)
    void KEY_Init(void)
{
           GPIO_InitTypeDef GPIO_InitStructure;                                                                       
           RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);                                                              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                       
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;       
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;                               
        GPIO_Init(GPIOA, &GPIO_InitStructure);                                                                                  GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4);
}
外部中断初始化函数EXTI_KEY_Init(void)
void EXTI_KEY_Init(void)
{
        GPIO_InitTypeDef   GPIO_InitStructure;                                                                                              EXTI_InitTypeDef   EXTI_InitStructure;                                                               
        NVIC_InitTypeDef   NVIC_InitStructure;                                                                  
     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);                                                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;                    
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;                                                                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;                                                  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;                               
     GPIO_Init(GPIOA, &GPIO_InitStructure);                                                               
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);                                                      SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource1);
 
     EXTI_InitStructure.EXTI_Line = EXTI_Line1;                                                       
     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;                                       
     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;                       
     EXTI_InitStructure.EXTI_LineCmd = ENABLE;                                                                                  EXTI_Init(&EXTI_InitStructure);       
                                                                       
     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn;                                                                  NVIC_InitStructure.NVIC_IRQChannelPriority = 0x00;                                                                       NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                                                                      NVIC_Init(&NVIC_InitStructure);                                                                               
}
定时器初始化函数TIM3_Init(void)
void TIM3_Init(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPriority = 3;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);                             
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
        TIM3-&gtSC=47999;
        TIM3->ARR=99;       
        TIM3->DIER|=1=0XFFFFFFF0)
                                FLASH_Write(FLASH_KM_TEST_ADDR,0);  
                else 
                                FLASH_Write(FLASH_KM_TEST_ADDR,x);  
               
                LCD_Init();                       
                               
                Self_Test();                                       
                GUI_Init();                 
                BACK_COLOR=GRAYBLUE; 
               
                km_test=FLASH_Read(FLASH_KM_TEST_ADDR);       
                while (1)
                {    
                       
                                LCD_Show2Num(108, 92,(uint16_t)speed,3,16,0);
                                LCD_Show2Num(140, 92,(speed-(uint16_t)speed)*100,2,16,0);
 
                                km=        ((float)(km_test/8)*2*pi*0.28/1000)/100;
                                LCD_Show2Num(108,132,(uint16_t)km,4,16,0);
                                LCD_Show2Num(148,132,(km-(uint16_t)km)*10,1,16,0);
                               
                                while((DMA_GetFlagStatus(DMA1_FLAG_TC1)) == RESET ); 
                                DMA_ClearFlag(DMA1_FLAG_TC1);                                                                                                 
                                temp = (float)RegularConvData_Tab[0]*(3.3/4096)*5.12; 
                                battery = temp*6000/12;
                                LCD_Show2Num(108, 172,(uint16_t)battery,6,16,0);
                                               
                                remain_km=battery*0.05;
                                LCD_Show2Num(108, 212,(uint16_t)remain_km,6,16,0);
                               
                                temp  = (float)RegularConvData_Tab[1]*(3.3/4096); 
                                temperate=(1.43-temp)/0.043+25;
                                BACK_COLOR=LBBLUE;
                                LCD_Show2Num(132, 280,(uint8_t)temperate,2,16,0);
                                LCD_Show2Num(156, 280,(temperate-(uint8_t)temperate)*100,2,16,0);
                                BACK_COLOR=GRAYBLUE;
                               
                                i++;
                                if(i>100)
                                {
                                                i=0;F_LED4;
                                                FLASH_Write(FLASH_KM_TEST_ADDR,km_test);  // 
                                }
                                delay_ms(10);
    } 
}
 
/*****************************END OF FILE*****************************/
 
 
作品实物图
IMG_20140112_184144_副本.jpg
 
IMG_20140112_184133_副本.jpg
 
电路原理图和源代码附件 智能仪器课程设计.zip (4.55 MB, 下载次数: 2310)
IMG_20140112_184119.jpg
IMG_20140112_184144_副本.jpg
回复

使用道具 举报

307

主题

3125

回帖

0

蝴蝶豆

论坛元老

最后登录
2020-7-17
发表于 2014-1-13 13:07:39 | 显示全部楼层

回复:【STM32F030开发日志/评测/笔记】+通用电动车行驶状态监测仪

Well done!多谢楼主,分享完整的设计~支持!
 
继续阅读原创汇总:
STM32F030探索套件开发日志,中文教程,使用问答80篇
回复 支持 反对

使用道具 举报

0

主题

34

回帖

0

蝴蝶豆

中级会员

最后登录
2020-6-12
发表于 2014-1-13 13:24:43 | 显示全部楼层

回复:【STM32F030开发日志】+通用电动车行驶状态监测仪

可以看源码吗???????????????
回复 支持 反对

使用道具 举报

0

主题

34

回帖

0

蝴蝶豆

中级会员

最后登录
2020-6-12
发表于 2014-1-13 13:26:44 | 显示全部楼层

回复:【STM32F030开发日志】+通用电动车行驶状态监测仪

可以看源码吗???????????????
回复 支持 反对

使用道具 举报

4

主题

36

回帖

0

蝴蝶豆

中级会员

最后登录
2019-11-19
 楼主| 发表于 2014-1-13 13:48:07 | 显示全部楼层

回复:【STM32F030开发日志】+通用电动车行驶状态监测仪

回复第 3 楼 于2014-01-13 13:24:43发表:
可以看源码吗???????????????
 
附件的压缩包里面有电路原理图和源码
 
回复 支持 反对

使用道具 举报

3

主题

999

回帖

363

蝴蝶豆

版主

最后登录
2020-11-26
发表于 2014-1-13 13:58:24 | 显示全部楼层

RE:【STM32F030开发日志】+通用电动车行驶状态监测仪

支持啊.................
回复 支持 反对

使用道具 举报

0

主题

21

回帖

0

蝴蝶豆

初级会员

最后登录
2018-7-3
发表于 2014-1-13 15:03:10 | 显示全部楼层

回复:【STM32F030开发日志】+通用电动车行驶状态监测仪

  谢谢楼主分享
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-1-13 16:00:53 | 显示全部楼层

RE:【STM32F030开发日志】+通用电动车行驶状态监测仪

不错的资料!
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-1-13 17:23:31 | 显示全部楼层

回复:【STM32F030开发日志】+通用电动车行驶状态监测仪

12312312313
回复 支持 反对

使用道具 举报

6

主题

29

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2014-1-13 17:30:27 | 显示全部楼层

RE:【STM32F030开发日志】+通用电动车行驶状态监测仪

值得大家好好学习!
回复 支持 反对

使用道具 举报

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版