一、点灯
keil里的main.c文件如下:
编译无误,即可去用ST-LINK下载烧录
硬件连接图如下:
ST-Link的连接图如下:
观测到板子灯亮即通电 否则可能板子烧坏了或者接线错误等
我们可以通过delay改变灯的闪烁频率
如pb5置1变短,led亮灯时间延长;同理pb5置0变长,led亮灯时间延长;
用tog也能运行,并且可以修改延迟,每500ms翻转一次
二、串口单字符通信
main.c:
usart.c:
1.串口初始化:
2.回调函数:
3.中断函数:
头文件:
usart.h:
编译无误后即可在stlink下载烧录
硬件图如下:
在xcom串口调试助手选择好对应的波特率、停止位、数据位,然后打开串口发送数据(英文输入法的字符)
三、串口字符通信
硬件连接图和二一样
main.c如下
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "stm32f10x.h"
#include "led.h"
int main()
{
/********************************************************************************
* Delay_init(); //本实验使用的是SysTick时钟
* CPU_TS_TmrInit(); //已经使能宏,不需要初始化
* uart1_init(115200); //串口初始化为115200,需要在usart.h中使能
* uart3_init(115200); //串口初始化为115200
********************************************************************************/
/* 初始化 */
uart1_init(115200); //usart初始化,波特率为115200,中断优先为NVIC_PriorityGroup_2
LED_GPIO_Config(); //初始化led使用的GPIO口
printf("--USART串口通讯--");
while (1)
{
if(strUSART_Fram_Record .InfBit .FramFinishFlag) //如果串口接收到数据,并结束
{
//增加一个结束符。
strUSART_Fram_Record .Data_RX_BUF [ strUSART_Fram_Record .InfBit .FramLength ] = '\0';
//将USART1接收到的东西全部打印出来,接收到的保存在这个数组里,再通过串口1发送出来,这样就能看到,我们发送的指令的响应,是否出错,
printf( "\r\n%s\r\n", strUSART_Fram_Record .Data_RX_BUF );
if(strstr ( strUSART_Fram_Record .Data_RX_BUF, "LED=1" ))
{
PCout(13) = 1; //PC口13引脚输出,高电平
printf("LED灭");
Delay_ms(500); //已经在delay.h中初始化
}
else if(strstr ( strUSART_Fram_Record .Data_RX_BUF, "LED=0" ))
{
PCout(13) = 0; //PC口13引脚输出,低电平
printf("LED亮");
Delay_ms(500);
}
strUSART_Fram_Record .InfBit .FramLength = 0; //清除接收标志
strUSART_Fram_Record.InfBit.FramFinishFlag = 0;
}
}
}
运行得: