STM32F103实现自行车里程计

STM32F103实现自行车里程计

器材准备

  • STM32F103板子一个
  • 杜邦线、面包线、面包板若干
  • ST-LINK V2 一个(烧录程序)
  • USB-TTL 一个(做串口输出测试)
  • 按钮两个
  • Win电脑一台(建议不要在mac下开发,实在太难受了)

连接

  • usb to ttl 和 stm32开发板连接图
    [id](#Table 1)
USB STM32
3.3V 3.3V
GND GND
TXD A10
RXD A9

- stm32和st-link直接按照对应的接口相连即可

环境搭建

软件安装

  • Keil UVision 5
  • STM32 ST-LINK Unity
  • STM32 CubeMX
  • STM32 ST-LINK所需要的驱动
  • USB-TTL所以需要的驱动 CH341SER for Win(这个视你的器件不同而定)
  • PUTTY(windows下查看串口)

软件使用

开始之前记得一定要先将驱动都安装好!

STM32 CubeMX

​ 进入STM32 CubeMX之后就可以使用了,我们选择STM32F103 - LQFP48 - 64Flash - 20RAM(老师提供的板子)进行配置。

​ STM32F103只是一块板子,我们先需要对板子进行简单的设计,比如哪个引脚做输入,哪个引脚做输出等等,直接使用STM32实现自行车里程计可能会出现一些完全想不到的错误,实现一些简单的功能对所用的器件进行简单测试(譬如是不是能正常工作的)。

由于我们使用的板子是STM32F103,直接使用CubeMX会去下载这个库,但是它自己下载速度超级慢,这里可以使用浏览器下载到 1.3.0版本的库,然后使用CubeMX下一个补丁就可以了,速度会快很多。

​ 然后Project->Settings修改工程设置,将Toolchain修改成MDK-ARM V5(否则默认是EWARM),这样我们之后才可以使用Keil进行项目管理。最后,Project -> Generate Code即可生成代码。

Keil UVision 5

使用上面的工具 设置好引脚之后就可以开始写代码了,直接在CubeMX中选择OpenProject就可以打开工程文件。

  • 将ST-LINK与STM32对应的借口连起来,然后调好设置:Flash->Configure Flash Tools->Debug->Settings查看连接是否正确,连接成功将如下图所示。
    这里写图片描述

  • 使用Keil生成HEX文件然后利用ST-LINK烧录进STM32中,需要在Flash->Configure Flash Tools->Output中勾选Create HEX File选项,如下图所示。其实不使用ST-LINK Unity,直接使用Keil也是能够烧录下板的,但是需要使用Patch Installer下载一个Algorithm,下载速度特别慢,因此这里还是使用生成HEX文件再利用ST-LINK Unity进行烧录的方法。

这里写图片描述

  • Flash->Configure->Utilities在Add Output File to Group选定Application/MDK-ARM,不然在目录下找不到对应的HEX文件。

这里写图片描述

  • Flash->Configure->Utilities->Settings选定Reset and Run,在STM32上使用的是ISP编程,烧录时要对芯片中Flash原有的数据全部抹除,烧进自己的数据,然后重新启动,bootloader起来后会跑对应的指令(在使用Keil下板时有用)。

这里写图片描述

  • 注意!每次重新打开Keil一定要记得将上面的流程全部都走一遍,不然就会出错,真是想吐槽这个IDE,一旦重启原来的设定就都不见了。
  • 将ST-LINK撤下,换上USB-TTL并接入PC(记得提前装好驱动),打开ST-LINK,导入一个HEX文件,如果像上面使用Keil建好的工程,则HEX文件在Project name/MDK-ARM/Project name下

这里写图片描述

  • 点击connect to the target,如果报错了说明是你的线路没接对或者驱动没装好
  • 点击Target->Erase Chip将芯片内Flash的数据全部擦除
  • 点击Target->Program & Verify,烧录数据,完成后烧录成功,芯片会执行对应的功能

元器件测试以及简单逻辑代码框架

闪烁小灯

  • 芯片引脚设置(PA9作为输出)
    这里写图片描述

  • 线路连接

    先使用STM32的3.3V输出检验二极管的方向,然后如下图所示小灯一个脚接GND,一个脚接A9,这样当A9输出高电平时小灯就会亮了。

这里写图片描述

这里写图片描述FullSizeRender

小灯在成功点亮之后说明杜邦线和小灯都是正常的(否则小灯可能就是坏的,或者线是坏的,只是极有可能的,我们连续测了三个小灯全是坏的,开始还以为是烧录少错了,查了好久,换成蜂鸣器做测试的时候居然响了。。。)。然后就可以使用面包板给小灯串联一个按钮,检测按钮和面包板的好坏,盒子里的器材中,我们又检测出一个按钮是坏的(按与不按小灯都会有信号)。

  • 代码

​ 我们之前对A9进行了设置,这个在工程中的main.c函数内有具体的体现。

void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;  //定义初始化结构

    __HAL_RCC_GPIOA_CLK_ENABLE();

    GPIO_InitStruct.Pin = GPIO_PIN_9;   //对端口9进行初始化
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);
}

​ 自己写代码实现小灯闪烁

while(1) {
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_9); //转换A9的输出状态
  HAL_Delay(1000);
}
  • 总结

​ 至此,我们实现使用STM32开发板完成了闪烁小灯的任务,通过以上的步骤,可以将所有的坏的元器件过滤掉,避免之后的bug大串联到焦头烂额,并且整体跑通了STM32开发的流程,之后的开发按照这个模板来就可以了。

串口通信

  • 芯片引脚设置

STM32芯片引脚设置

​ 将PA9,PA10设置为串口通信用的TX和RX(对应接法已经在上面的表格中表达出来了),注意要在CubeMX中将USART1设置为半双工(Cortex-M3的单线程半双工模式),将PA12和PA11设为Input,我们将两个按钮分别接到这两个引脚和GND,这样芯片可以根据两个引脚的输入进行交互。

  • 线路连接
    这里写图片描述

    原谅我这鬼畜的波浪线,如图所示,直接将两个USB口全部接到电脑上,就可以不用重复的插拔插拔了(共用了电源线)。A11,A12分别接上两个button用来监测按钮的状态,将A11,A12内部设置为上拉到输入模式(接一个上拉电阻),在main()函数内进行循环检测,并在其中一个按钮按下时,输出两个按钮的状态信息。
    这里写图片描述
    这里写图片描述

​ 按键已经去抖动,上方是按键状态后得到的输出。

  • 代码

main.c中进行修改

/*-------------------------------main.c------------------------------------*/
//....
void UART0_Init(UART_HandleTypeDef* UartHandle){
    UartHandle->Instance = USART1;
    UartHandle->Init.BaudRate = 9600;
    UartHandle->Init.WordLength = UART_WORDLENGTH_8B;
    UartHandle->Init.StopBits = UART_STOPBITS_1;
    UartHandle->Init.Parity = UART_PARITY_NONE;
    UartHandle->Init.HwFlowCtl = UART_HWCONTROL_NONE;
    UartHandle->Init.Mode = UART_MODE_TX_RX;

    HAL_UART_Init(UartHandle);    //初始化UART
}
//根据输入对给定的端口进行初始化,设置波特率等等

#define MASK 0xFF
//给按钮去抖动检测的长度(8bit)

void anti_jitter(int *bit, int state)
{
    *bit <<= 1;
    *bit&= MASK;
    *bit|=state;
}
//按钮不只是在开合的时候会有抖动,不按下的时候线路都会时断时续,所以去抖动一定要加上

int main(void)
{
//...
    char str[30];
    int Pin_11_Bitcount = 0,Pin_12_Bitcount=0;
    int Pin_11_State=0,Pin_12_State=0;
    int Change_Flag=1;
    UART_HandleTypeDef UartHandle;
    UART0_Init(&UartHandle);
//设置变量,并对UART0进行初始化

    HAL_UART_Transmit(&UartHandle, (uint8_t*)"Hello, World!\r\n", 16, 500);
//在Reset之后立刻向串口输出信息Hello, World! 这里记得要加入\r\n,否则输出的全是糊的
    while(1)
    {
        int count;
        GPIO_PinState state_11;
        GPIO_PinState state_12;

        state_11 = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_11);
        state_12 = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_12);
      //读取11、12的端口的状态,但是直接使用这些状态会有抖动的情况

        HAL_Delay(5);
      //延迟五秒用来延长读取状态的间隔,用来去抖动

        anti_jitter(&Pin_11_Bitcount,state_11);
        anti_jitter(&Pin_12_Bitcount,state_12);
      //对两个端口去抖动,state_11,state_12是当下的
最低0.47元/天 解锁文章
嵌入式开发之 STM32自行车码表(图文)
eric6079hn的博客
04-16 1万+
嵌入式开发之 STM32自行车码表(图文) 笔者将从以下几个方面逐步深入地讲解STM32F103C8开发板的使用,并在Windows下编写一个简单的自行车码表程序: 元器件 环境搭建 电路连接 一个简单的LED闪烁程序 自行车码表 嵌入式开发之 STM32自行车码表图文 准备工作之 元器件 准备工作之 电路连接 准备工作之 环境搭建 CubeMX配置 Kei
基于STM32单片机智能自行车点阵显示霍尔测速码表设计21-724
Danpianjihuizong的博客
04-02 149
21-724、基于单片机的自行车信号显示系统的设计-拨动-8x8点阵-KEY-LCD1602-电磁锁产品功能描述:本设计由STM32F103C8T6单片机核心板电路+拨动开关电路+8*8点阵显示电路+按键电路+电磁锁控制电路+LCD1602液晶显示电路+电位器调速电机电路组成。1、通过拨动开关来模拟自行车左转向或者右转向,拨动开关拨到左侧,即为左转向,此时点阵显示左箭头;拨动开关拨到右侧,即为右转向,此时点阵显示右箭头。2、按下双闪按键,则点阵循环显示红圈,进行警示。3、刹车按键按下,则电磁锁伸出,点阵屏全
stm32霍尔传感器测速程序
01-02
利用stm32的定时器,对电机的传感器输出信号进行计数测量转速,使用捕获功能,实现多台电机的测速.rar
正点原子STM32精英板串口4调试
honghuaji117的博客
03-23 196
1.复制正点原子485程序,作为模板,将其中485程序复制,更改USART4,进行编译后报55个不良;复制KEY实验,将485文件夹复制到HARDWARE文件夹。最近一个小的项目用到了STM32F103的串口4,利用正点原子精英板进行提前调试。将485.C和485.h文件名改为UART4.C,UART4.导入工程。4,编译不通过,反复检查发现一个尝试UART4 不是 USART4。5,做两个方面的验证 1判断接收到的字符是特殊字符则响蜂鸣。微信号:15762271229 QQ:923800110。
Lab 3:自行车码表
七把叉
04-30 2180
实验目的 实验器材 硬件 软件 实验步骤 一连接示意图 二首先配置环境安装STM32CubeMX等等一系列 三UART图 四编写Cube程序配置UART0为96008n1上电后向串口输出Hello在PC上通过串口软件观察结果实验目的 理解MCU上电启动过程; 掌握使用Cube库来编写STM32裸机程序的方法; 掌握使用Cube库来编写GPIO和UART程序的方法; 掌握使用Cube库来编写中断响应程
基于STM32的里程表计数器组装机设计.zip
10-16
基于STM32的里程表计数器组装机设计
基于单片机的自行车码表设计
咸鱼弟的博客
11-25 3620
word完整版可点击如下下载>>>>>>>> 基于单片机的自行车码表设计-硬件开发文档类资源-CSDN下载内容包括详细设计文档word版,附带开题报告和相关PPT等文档,供大家参考学习。也可在本博客主页找到更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/u013253075/40315187 目 录 摘 要----------------------------------......
STM32F103 模拟IIC实验_STM32F103
09-25
STM32F103模拟IIC实验.学习STM32模拟IIC的使用,驱动24C02实现EEPROM数据读写. 硬件资源: 1,DS0(连接在PB5) 2,串口1(波特率:115200,PA9/PA10连接在板载USB转串口芯片CH340上面) 3,ALIENTEK 2.8/3.5/4.3/7寸TFT...
STM32F103RCT6最小系统
06-01
STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103RCT6最小系统STM32F103...
STM32F103工程bootload
最新发布
04-24
编写一个针对STM32F103的Bootloader例程涉及到几个关键步骤:初始化硬件、配置串口通信(通常用于调试和接收固件更新指令)、实现Flash编程算法以及处理固件更新流程。以下是一个简化的Bootloader例程框架,用于STM...
基于STM32F1的霍尔传感器测速程序
11-04
这是一个基于STM32的霍尔传感器测速程序,控制器为STM32F1,串口输出显示
STM32F103C8+编码器-转速里程计库函数版.rar
01-25
基于STM32F103C8最小系统板+欧姆龙E6A2-CW5C旋转编码器的测速计程方案源码,实现功能: 1. TIM4开启编码器计数模式,计下由连着车轮的编码器发出的脉冲数 2. TIM3定时,间隔固定时间进行更新计算,根据对应关系在TIM3中断服务函数算出转过角度,角速度,线速度,路 程等数据 3. 串口USART1把数据定时发送给上位机
基于STM32的智能自行车码表设计.pdf
09-11
一台基于STM32的智能自行车码表,能够实现测量当前自行车行驶速度、行驶距离、踩踏频率、通过ANT 数据传输协议并配合心率带实现实时心率显示等功能。
stm32f103c8t6智能小车测速并显示行驶距离实验程序源代码.rar
12-02
该程序源代码用于STM32F103C8T6智能小车测速并显示行驶距离实验。 1、源代码开发软件:keil4; 2、程序对应处理器是:STM32F103C8T6; 3、智能小车电机驱动芯片是:L293D; 4、智能小车电机为:TT直流减速电机; 5、需要用到测速模块; 6、需要用到OLED液晶模块; 该程序源代码在本人STM32F103C8T6智能小车上亲测可用。
stm32f103c8t6频率计.zip
08-23
基于stm32f103c8t6的频率计,测频范围,最小0.几Hz,最大到几MHz,自动变档位,精度挺高。
STM32F103DFUBootloader_STM32F103_
09-29
stm32f103 bootloader
里程计(一) 数学模型及STM32实现
weixin_54424184的博客
02-23 1703
轮速里程计数学模型及STM32实现
基于STM32单片机智能自行车里程表码表霍尔测速蓝牙设计23-117
Danpianjihuizong的博客
03-01 302
23-117、STM32单片机自行车里程表码表霍尔测速系统+蓝牙手机APP上传设计 功能描述: 本系统由STM32F103C8T6单片机核心板、霍尔传感器、LCD1602液晶、电机驱动、蓝牙模块组成。 1、通过霍尔传感器检测单位时间内电机上磁铁经过的次数,也就是转动的圈数,从而计算出转速、速度、距离等值。 2、lcd1602液晶实时显示转速、速度、路程数据。 3、电机电源驱动能够驱动电机启动,通过单联功率电位器可以调节电机驱动能力即调速。 4、将液晶显示数据实时上传到手机蓝牙串口助手APP。
proteus仿真stm32f103c8t6气压计
04-17
Proteus是一款常用的电子电路仿真软件,可以用于模拟和验证各种电子电路设计。而STM32F103C8T6是一款常用的ARM Cortex-M3内核的微控制器,它具有丰富的外设和强大的性能。 如果你想在Proteus中仿真STM32F103C8T6气压计,你需要进行以下几个步骤: 1. 下载并安装Proteus软件:你可以从Labcenter Electronics官方网站上下载并安装最新版本的Proteus软件。 2. 下载STM32F103C8T6模型:在Proteus中,你需要使用STM32F103C8T6的模型来进行仿真。你可以在一些第三方网站上找到这个模型,并将其导入到Proteus中。 3. 设计气压计电路:使用Proteus的电路设计工具,你可以设计出与STM32F103C8T6相连的气压计电路。根据气压计的规格和接口要求,连接相应的元件和引脚。 4. 添加代码:在Proteus中,你可以使用C语言或者汇编语言编写STM32F103C8T6的代码。根据气压计的通信协议和数据处理要求,编写相应的代码。 5. 进行仿真:完成电路设计和代码编写后,你可以在Proteus中进行仿真。通过仿真,你可以验证气压计电路的功能和性能,以及代码的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • STM32F103实现自行车里程计 5747

分类专栏

  • Visual SLAM
  • 嵌入式系统

最新评论

  • STM32F103实现自行车里程计

    木偶人的感情: 您好,老哥,真的看到您设计的里程计,感觉又看到了希望,因为我最近也在做一个里程计,老哥写的真的好细心。感谢老哥,老哥能不能分享一下您的源码。因为我最近在也做这个,真的很麻烦老哥。万分感谢780900694@qq.com

大家在看

  • 数据防泄密知识集锦|5个有效防止数据泄露的方法,你知道吗? 288
  • 重生之 SpringBoot3 入门保姆级学习(18、事件驱动开发解耦合) 523
  • MySQL中的日期格式化匹配
  • MySQL数据库基础练习系列总篇、各系统列表
  • PostgreSQL17优化器改进(4)允许UNION(没有ALL)使用MergeAppend

最新文章

2016年1篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

两个鬼故事1994年日历天龙八部地图哦文姬20211314代表什么意思姓贾女起名字物流起名的推荐金瓶梅2008武破九荒理财工具桐华欺诈游戏韩国600429周易宝宝起名网杨姓孩子起名大全给树起名字啊漩涡六道男孩国学起名字大全吸顶喇叭慕起名字女孩冒险岛战士属性加点起4个字名称创幻财经论坛小别胜新婚新生宝宝起名大全男孩为什么无名指不能单独竖起东方家园装饰起名男人诗经女楚辞理财产品是什么世风日下丘姓起名男孩名字少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化