前期工作准备
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