嵌入式 LAB 3:自行车码表

前期工作准备

Mac OS X + Windows 7虚拟机
安装STM32 ST-LINK Unity。用于烧录程序。
安装STM32 ST-LINK所需要的驱动
安装Keil UVision 5,这是IDE,可以生成Hex文件,也可以烧录到板子上。
安装USB-TTL所以需要的驱动。
安装PUTTY,Windows下查看串口。

器材准备

STM32F103板子一个
杜邦线、面包线若干
ST-LINK V2
USB-TTL
按钮两个、面包板两个

Hex文件生成

切换成MDK-ARM
转换

一定要选择Reset and Run。Build选项: Create HEX File选项,如下图所示。其实不使用ST-LINK Unity,直接使用Keil也是能够烧录下板的,但是需要使用Patch Installer下载一个Algorithm,经常会出现各种bug,我和队友在这里都出现了很多问题,所以用ST-LINK烧录是一个不错的选择。

设置

烧录程序示意

连接方式
连接方式

打开选择将要烧录的文件,然后
1、Erase Chip 擦出所有数据
2、Program & Verify
烧录代码

串口通信

串口通信

连接图

实验步骤

1、编写Cube程序,配置UART0为9600,8n1,上电后向串口输出“Hello”,在PC上通过串口软件观察结果

配置UART0
代码

改动的代码
这里写图片描述

结果如图所示
结果

2、通过面包板在PA11和PA12各连接一个按钮开关到地

连接面包板
连接图

3、编写Cube程序,配置PA11和PA12为内部上拉到输入模式,在main()函数循环检测PA11按钮按下,并在按钮按下时 在串口输出“Pressed”

去抖动,其中MASK为0xFF,说明采集的区间为0xFF。

void anti_jitter(int *bit, int state){
    *bit <<= 1;
    *bit&= MASK;
     *bit|=state;
}

处理思路如下:
当State == 1时表示接通。
当State == 2时表示断开。

anti_jitter(&Pin_11_Bitcount,state_11);
anti_jitter(&Pin_12_Bitcount,state_12);
//如果位不全为0,而且现在的状态为0,那么转化为断开。
if(Pin_11_Bitcount != 0 && Pin_11_State == 0)
{
        Pin_11_State = 1;
        Change_Flag = 1;
}
if(Pin_12_Bitcount !=0 && Pin_12_State == 0)
{
        Pin_12_State = 1;
        Change_Flag = 1;
}
if(Pin_11_Bitcount == 0 && Pin_11_State == 1)
{
        Pin_11_State = 0;
        Change_Flag = 1;
}
if(Pin_12_Bitcount == 0 && Pin_12_State == 1)
{
        Pin_12_State = 0;
        Change_Flag = 1;
}
//如果状态发生改变,我们就观察一下PIN11和PIN12哪个是正常的。
if(Change_Flag == 1)
{
    Change_Flag = 0;
    count = sprintf(str,"Pin 11:%d\r\n",Pin_11_State);
    HAL_UART_Transmit(&UartHandle, (uint8_t*)str, count, 500);
    count = sprintf(str,"Pin 12:%d\r\n",Pin_12_State);
    HAL_UART_Transmit(&UartHandle, (uint8_t*)str, coun
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值