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

查看: 11589|回复: 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版