按下按键,串口调试助手接收区显示接收到的字符“1”,同时LED2亮一下表示发送成功。
开发板用的是STM32F03ZET6芯片。
主函数main.c代码如下:
#include 'SysTick.h'
#include 'led.h'
#include 'key.h'
#include 'uart.h'
/*************************************************
*函数名:主函数
*函数功能:按下按键KEY_UP,向串口发送字符1
*输入:无
*输出:无
**************************************************/
int main()
{
SysTick_Init(72); //初始化延时函数
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
USART1_Init(9600); //初始化串口1,波特率9600
while(1)
{
if(K_UP == 1) //判断上按键是否按下
{
delay_ms(20); //按键消抖
if(K_UP == 1)
{
USART_SendData(USART1,'1'); //发送字符1
led2=0; //led2亮,表示发送成功
delay_ms(500);
}
}
led2=1; //led2灭
}
}
从主函数可以看出,首先对外设初始化。
while死循环中,判断按键按下之后,通过串口发送字符1到PC端的串口调试助手,同时LED2亮一下表示字符发送成功。
报错分析
记录下我踩过的坑,以及解决的办法,希望对你能有帮助。
当时用的标准库开发,一顿操作猛如虎,敲完代码,点击Rebuild,好家伙报了5个Errors。
之前没遇到过这种报错,网上搜一下只是得到了笼统的答案,没有具体指出如何操作。
产生如下报错,原因是编译器没有找到XXX函数的定义。
XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
分为如下两种情况,我遇到的是第二种:
XXX函数的头文件没有包含进工程里面,检查下图Include Paths是否缺少XXX所在源文件(.c文件)的头文件路径。
XXX函数所在的源文件没有加入到工程里面。检查了一下,发现工程中缺少stm32f10x_usart.c这个串口外设库文件,添加上就行了。
总结
有时候为了偷懒,把旧工程文件复制一份,在此基础上建新工程。但是,复制一时爽,修改火葬场,两个工程之间细微的差别可能会造成各种各样的报错。
关键字:按键控制 串口发送数据 STM32
引用地址:
按键控制串口发送数据的STM32实例
推荐阅读最新更新时间:2024-11-02 20:14
stm32学习之十
USART,AD与GPIO的温度传感器: 注意的是: 1、ADC_RegularChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_239Cycles5); 2、ADC_TempSensorVrefintCmd(ENABLE); 依照上一节的程序,可以改写以下,形成现在的程序与效果: add.h和add.h(写成这种方式,原因与上一节一样) add.h的代码: #ifndef _ADD_H #define _ADD_H #include stm32f10x.h //对于12位的ADC,3.3V的ADC值为0xfff,温度为25度时对应的电压值为1.43V即0
[单片机]
STM32入门之中断
首先弄清楚几个问题: 1、什么是中断? CPU在执行一个程序时,对系统发生的某个事件(程序自身或外界的原因)作出的一种反应:CPU暂停正在执行的程序,保留现场后自动转去处理相应的事件,处理完该事件后,到适当的时候返回断点,继续完成被打断的事情。 举个例子:当你在上班,然后你的老板来了(中断),叫你去处理某些事情(中断函数),你只好放下手中的事情去处理老板给的事情,处理完以后你继续回来工作(返回断点)。 2、中断系统有什么功能? 1、实现中断与返回 提醒进行中断,和返回之前做的事情。(提醒老板来找你处理事务,处理完事务 之后返回继续手中的工作) 2、实现优先级排队 进行优先级的配置,优先级高的优先执行。(如果你的老板和
[单片机]
STM32 EXTI中断设置五步曲
首依实际系统选择需要多少个中断优先级即 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 然后按下列5步 1 AFIO及GPIO时钟设置 2 要中断的脚设为IN_PU或浮空输入 3 绑定exti中断引脚如 GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0); 4 配置边沿触发 即设置 EXTI_InitTypeDef EXTI_InitStructure; 5 配置中断向量 即设置 NVIC_InitTypeDef NVIC_InitStructure; 另外 不要忘了在中断程序中补充相应的中断函数
[单片机]
STM32之USART(one)
USART我们一般是用在调试程序时输出调试信息,或者是用来做串行通讯。 看到ST的手册USART的功能有多么强大,其实我们很少用到那么多功能,再者我对那些部分也不是很熟,所以我们先说一下我们最常用最简单的部分,以后如果用到其他的模式我们再来看,我们的内存是有限的,所以将这些最常用的知识常驻内存吧。 好了,那我们下边来看USART: 使USART正常使用,我们总结下步骤吧 1.要使用一个模块第一我们就要先时能相应的时钟,相应的,如果某个模块不再使用了要关闭相应的始终,这样的点点滴滴我们就能降低我们系统的功耗。 2.配置相应的引脚 3.配置USART的波特率,帧格式等 4.然后就是发送接收的事了
[单片机]
STM32学习笔记:CAN总线的过滤器
STM32 CAN控制器,提供了28个可配置的筛选器组(F1仅互联型才有28个,其他的只有14个), STM32 CAN控制器每个筛选器组由2个32位寄存器组成(CAN_FxR1和CAN_FxR2,x=0~27)。根据位宽不同,每个筛选器组可提供: ● 1个32位筛选器,包括:STDID 、EXTID 、IDE和RTR位 ● 2个16位筛选器,包括:STDID 、IDE、RTR和EXTID 位 对于过滤器组, 可以将其配置成屏蔽位模式, 这样 CAN_FxR0中保存的就是标识符匹配值, CAN_FxR1中保存的是屏蔽码,即 CAN_FxR1中如果某一位为1,则 CAN_FxR0中相应 的位必须与收到的帧的标志符中的相应位吻合才能通
[单片机]
基于stm32的4X4矩阵键盘定时器扫描消抖法,彻底告别delay函数
经本人刻苦钻研,将51单片机上用的矩阵键盘扫描程序移植到了stm32上,同时也做了很大的改进,最大的改进莫过于消抖这块了。以前的消抖总是采用delay延时约10到20ms的时间,但这样会导致MCU在延时里空跑而造成主程序被搁置,显然,程序的实时性大打折扣,今天便在此让新手们别delay,从此走进一个崭新的扫描消抖世界!(本人也是新手——爱钻研的新手哈!^_^) //stm32矩阵键盘翻转扫描法(PB口的低8位) //将此矩阵键盘扫描程序放在定时器中断服务程序里 //每10ms进入一次中断服务程序 s8 scan_MatrixKey(void) { #define PORT GPIOB- IDR u8 colum
[单片机]
基于STM32单片机的火灾防盗系统设计
一.系统概述 本次式设计的系统是以 STM32 单片机作为核心控制器,可以控制烟雾传感器、火焰传感器对相关数据进行采集,可以通过红外对是否有人进行监测,当监测到火焰会控制短信提醒火灾危险,当红外识别到人且输入密码错误的时候会短信提醒有人闯入。需要有一个密码输入的功能。 二.仿真概述 1.系统内可以检测烟雾浓度、检测是否有火焰、检测是否有人,检测到火灾发生且有人闯入就会通过GSM进行远程提醒。使用矩阵键盘来输入密码的,当检测到人且密码输入不正确就会认为是有人闯入。 2. 调节烟雾传感器的滑动变阻器可以调节烟雾的模拟输出量,烟雾的改变可以在显示端体现。 3. 拨动人体检测的开关即模拟检测到人和检测不到人,在显示屏端也会相
[单片机]