自行车码表

实验环境windows。 
其实只是想起我的博客还一点都没写,就想把实验过程写下来,可以给写报告的我回忆。毕竟我只是一条金鱼。

配环境

安装STM32CubeMX,改安装地址,下一步下一步,over. 改软件安装地址的话最好是英文路径,软件装多了的觉悟┗|`O′|┛

打开软件,长这样。新建工程。
选芯片
新建的Project是不能立即用的,还差一些依赖。在目睹了室友用自带的安装软件崩盘了不知道多少次,我决定本地安装。
点击Help->Install new libraries -> 左下角  From Local... 把下载的包和补丁导入即可。 
本地真的炒鸡方便的,流下了开心的泪水。
点击Project -> Setting,填项目名称、位置和工具。选MDK-ARM V5,这个就是要装Keil了。装Keil比较方便,按步骤就好。
然后,点击代码生成按钮。
生成着生成着就会跳出
那就open project吧  跳转keil的界面。 在你看到项目的基础文件之前 会要你安装个依赖包。还是在线安装,很慢还会跳出奇奇怪怪的提示。反正可以下完,下完之后就会出现一系列基础文件,可以修改这些文件来做我们的实验。
为了下载,需要改几个设置。 在keil上点击Flash ->Configuration Flash Tools, 把Use Debug Driver前面的勾去掉。
再看 lab3旁边的魔法棒,点击进入,根据fm给的教程走,可以看到下面这张图。
记住F7模块编译,F8下载到板子。
然后就开始做实验吧

实验步骤

连接图按Lab3指导的来。还是有点不一样的,用了两个usb,有改动的连接是看了李明哲的博客。所以经常翻翻同学的博客还是很有用的,特别是几个会提前做作业的大神们。万分感激。
连线图如下:
其中,ST-LINK四根线3.3V GND SWDIO SWCLK分别对应STM32上3.3V GND DIO DCLK. PA9 PA10分别连另一个USB的RXD TXD. 然后STM32的GND和面包板相连。
具体实验步骤参考:
http://www.jianshu.com/p/c43f0bc2709c
最终版的main.c如下
  ******************************************************************************* File Name          : main.c* Description        : Main program body******************************************************************************/* Includes ------------------------------------------------------------------*/
#include "stm32f1xx_hal.h"/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart1;/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*//* USER CODE END PFP *//* USER CODE BEGIN 0 */UART_HandleTypeDef UartHandle;
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);
}#define MAX_BITCOUNT 0xff
#define CHECK_DELAY 10
#define PERIMETER 2
void anti_jitter(int *bitcount, int state){*bitcount <<= 1;*bitcount &= MAX_BITCOUNT;*bitcount += state & 1;
}int PAcount=0, PAflag=0,mode = 0;
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){switch (GPIO_Pin){case GPIO_PIN_11:HAL_UART_Transmit(&UartHandle, (uint8_t*)"PA11 invokes\r\n", 14, 100);mode=1-mode;break;case GPIO_PIN_12:PAcount++;break;}
}//Timer InitializationTIM_HandleTypeDef TIM_Handle;TIM_ClockConfigTypeDef sClockSourceConfig;TIM_MasterConfigTypeDef sMasterConfig;int TIMflag = 0, TIMcount = 0;void TIM_Init(){TIM_Handle.Instance = TIM3;TIM_Handle.Init.Prescaler = 8000;TIM_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;TIM_Handle.Init.Period = 199;TIM_Handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_Base_Init(&TIM_Handle);sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;HAL_TIM_ConfigClockSource(&TIM_Handle, &sClockSourceConfig);sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;HAL_TIMEx_MasterConfigSynchronization(&TIM_Handle, &sMasterConfig);}void TIM3_IRQHandler(void){HAL_TIM_IRQHandler(&TIM_Handle);
}int Route[5];
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){TIMcount++;int cnt = 0;char sentence[64];int current = (TIMcount - 1) % 5;int previous = (current + 1) % 5;int distance = PAcount * PERIMETER;Route[current] = distance;if(mode == 0){cnt = sprintf(sentence, "Distance: %d\r\n", distance);}else{float speed = Route[current] - Route[previous];cnt = sprintf(sentence, "Speed: %f\r\n", speed / 1.0);}HAL_UART_Transmit(&UartHandle, (uint8_t*)sentence, cnt, 100);
}   /* USER CODE END 0 */int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration----------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* Configure the system clock */SystemClock_Config();/* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */UART0_Init(&UartHandle);//HAL_UART_Transmit(&UartHandle, (uint8_t*)"Hello", 5, 100);TIM_Init();HAL_TIM_Base_Start_IT(&TIM_Handle);GPIO_InitTypeDef GPIO_InitStruct;__GPIOA_CLK_ENABLE();GPIO_InitStruct.Pin = GPIO_PIN_11;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);GPIO_InitStruct.Pin = GPIO_PIN_12;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);HAL_NVIC_SetPriority(EXTI15_10_IRQn,0,0);
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */HAL_SuspendTick();HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);HAL_PWR_EnableSleepOnExit();   while (1){}/* USER CODE END 3 */}/** System Clock Configuration
*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct;RCC_ClkInitTypeDef RCC_ClkInitStruct;RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValue = 16;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;HAL_RCC_OscConfig(&RCC_OscInitStruct);RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0);HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);/* SysTick_IRQn interrupt configuration */HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}/* USART1 init function */
void MX_USART1_UART_Init(void)
{huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;HAL_HalfDuplex_Init(&huart1);}/** Configure pins as * Analog * Input * Output* EVENT_OUT* EXTI
*/
void MX_GPIO_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;/* GPIO Ports Clock Enable */__HAL_RCC_GPIOA_CLK_ENABLE();/*Configure GPIO pins : PA11 PA12 */GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);}/* USER CODE BEGIN 4 *//* USER CODE END 4 */#ifdef USE_FULL_ASSERT/*** @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t* file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */}#endif/*** @}*/ /*** @}
*/ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

Lab3: 自行车码表相关推荐

  1. 基于51单片机自行车码表设计

    [毕设课设]基于51单片机自行车码表设计 ​效果图 Proteus仿真: 功能简介: 文件内容: 程序框架: 网盘链接: ​效果图 更多内容请关注@WENJIE电子科技 ​ 基于51单片机proteu ...

  2. Garmin Edge 1030 Plus GPS 骑行码表今日立减 300 美元

    Prime 会员日已全面生效,甚至山地自行车手和其他骑自行车的人也可以参加 Prime 会员日优惠 .Garmin Edge 1030 Plus自行车电脑在Prime Day的价格降至400美元,如果 ...

  3. 智能可穿戴平台,你更看好谁?

    随着可穿戴设备大潮来袭,众巨头纷纷布局可穿戴.6月,苹果发布了Healthkit平台,谷歌则发布了AndroidWare平台,日前,腾讯(微信)的智能硬件计划曝光.前两者从系统层面出发,都希望自己成为 ...

  4. 从 B 站火到 GitHub,国人开发者又一黑科技面世!

    点击上方"Github爱好者社区",选择星标 回复"资料",获取小编整理的一份资料月石一 发自 凹非寺本文经AI新媒体量子位(ID:QbitAI)授权转载,转载 ...

  5. 《痞子衡嵌入式半月刊》 第 50 期

    痞子衡嵌入式半月刊: 第 50 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期. 本期刊是开源项目(GitHub: JayHeng/pz ...

  6. c语言单片机停车场收费系统,基于51单片机停车场车位引导系统设计

    ?周明彬 曾伊玲 摘要:在很多人流量大的地方,因为车辆集中的情况,所以每次经过停车场时都需要工作人员来指挥车辆,告诉车主停车场那些地方还有空余车位可以泊车.所以很多地方的旧停车场使用的管理方式,是十分 ...

  7. 自制车速记录仪「GitHub 热点速览 v.21.31」

    作者:HelloGitHub-小鱼干 如果你有一辆普通的自行车,那么就可以使用下 X-TRACK 这个项目制作一个自己的测速器,记录你的行驶轨迹还有车速,体验一把硬件发烧友的乐趣.如果你有一个非 ma ...

  8. 基于单片机的压力流量报警器(附代码+仿真+论文)

    基于单片机的压力流量报警器(附代码+仿真+论文) **==完整论文+代码+仿真可关注我在主页私我==** 摘要 关键字 第一章绪论 1.1课题背景及其意义 1.2 国内外的研究状况 1.3本文的主要研 ...

  9. Edge 705试用

    Edge 705是早就听说过的玩意,特别是在环法自行车赛中出尽了风头,那时候在想我要是有一个Edge 705那该多好啊.现在,我终于有了一个Edge 705,是英文版的,不过有已经不错了.只是由于平时 ...

  10. 咕咚为何值1.5亿美元?

    做运动社区和智能硬件产品的咕咚昨日宣布从SIG和软银获得3000千万美金的B轮融资,估值1.5亿美元.咕咚CEO申波表示这笔钱将主要用于研发.运营和人才引进. 之前咕咚曾在今年3月份获得来自深创投和中 ...

最新文章

  1. 【2018.2.28】思考与练习
  2. 07Oracle Database 数据表
  3. asp.net等项目编译失败的原因之不能写入
  4. DEEPIN 20安装镜像进入LIVE模式
  5. 潭州课堂25班:Ph201805201 爬虫基础 第九课 图像处理- PIL (课堂笔记)
  6. IoT -- (三) 2018 Top物联网项目排名
  7. unwrap函数c语言实现,AppDomain与Assembly的动态加载与卸载代码详解
  8. 一行数据中三列值的比较
  9. java计算两个经纬度之间的直线距离
  10. 如何编写DTD文档类型定义
  11. 【Bugku】Misc2
  12. 初试Android原生弹窗
  13. Volume was not properly unmounted. Some data may be corrupt
  14. csdn格式字体、样式、排版
  15. SVN服务器迁移方法(Windows环境)
  16. 【SQL注入】手工注入常用语句合集
  17. Python调用百度AI接口
  18. mysql 定时任务编写
  19. 洛谷P2698 [USACO12MAR]Flowerpot S
  20. 安装和设置vAG服务器虚拟机的过程,CDSM-5 桌面云安装部署

热门文章

  1. 用R语言看武汉市武昌区房租出租情况
  2. 微服务守护神-Sentinel-热点-授权-系统规则
  3. 独立开发者:我为什么要学游戏编程?
  4. UVM factory机制 override机制详解
  5. 心肌损伤的标志物题库【1】
  6. 迅雷CEO邹胜龙自述:迅雷十年反思
  7. [Erlang]AC自动机过滤屏蔽词
  8. 720度全景图有什么优势?
  9. wpf 监听退出事件_【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
  10. SaaS到底是什么?如何做?