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

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

[复制链接]
laoheng205 提问时间:2014-1-13 12:03 /
 由于最近比较忙,所以在收到板子一个多月后才来评测,在此向与非网说声抱歉!
这个项目是本人在大学里的一个课程设计,采用了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, 下载次数: 2316)
IMG_20140112_184119.jpg
IMG_20140112_184144_副本.jpg
收藏 2 评论43 发布时间:2014-1-13 12:03

举报

43个回答
shaoxiu 回答时间:2016-3-17 14:31:10
很不错的资源,我想用我板子把你的做一遍。
问题是,我有个STM32F103的板子,跟你的不一样,你能否把你STM32F0 Discovery探索板原理图的详细资料给我呢,毕竟你电路图的端口很乱。
非常感激,我是学生。
leadsun2888 回答时间:2015-8-4 08:58:48
好东西,值得大家常习。
zhaozhenxingzzx 回答时间:2019-9-15 08:58:40
谢谢楼主分享
沐紫 回答时间:2014-1-13 13:07:39

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

Well done!多谢楼主,分享完整的设计~支持!
 
继续阅读原创汇总:
STM32F030探索套件开发日志,中文教程,使用问答80篇
四筒 回答时间:2014-1-13 13:24:43

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

可以看源码吗???????????????
四筒 回答时间:2014-1-13 13:26:44

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

可以看源码吗???????????????
laoheng205 回答时间:2014-1-13 13:48:07

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

回复第 3 楼 于2014-01-13 13:24:43发表:
可以看源码吗???????????????
 
附件的压缩包里面有电路原理图和源码
 
MrJiu 回答时间:2014-1-13 13:58:24

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

支持啊.................
随风-368133 回答时间:2014-1-13 15:03:10

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

  谢谢楼主分享
fengkai-16495 回答时间:2014-1-13 16:00:53

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

不错的资料!
YY-353727 回答时间:2014-1-13 17:23:31

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

12312312313
sinfly2014 回答时间:2014-1-13 17:30:27

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

值得大家好好学习!
sinfly2014 回答时间:2014-1-13 17:31:56

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

楼主,电路图要什么软件才能打开的。
月满楼 回答时间:2014-1-13 18:42:53

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

哈哈 不错 不错 我也来学习学习
laoheng205 回答时间:2014-1-13 19:44:05

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

回复第 11 楼 于2014-01-13 17:31:56发表:
楼主,电路图要什么软件才能打开的。
 
 
DXP 2004,我传了个PDF的
电路原理图.pdf (905.4 KB, 下载次数: 26)
zhang7309 回答时间:2014-1-14 07:59:57

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

这个好,顶一个!
chen-2039767 回答时间:2014-1-14 08:24:52

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

多谢了,学习学习
123下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版