STM8学习笔记---uart1串口中断

发布者:糖果龙猫最新更新时间:2020-01-07 来源: eefocus关键字:STM8  uart1  串口中断 手机看文章 扫描二维码
随时随地手机看文章

uart1串口发送、接收中断。


目标:串口接收1,点亮led1,接收2点亮led2,接收到其他字符关闭led1和led2。


步骤如下:


1、编写led.h和led.c文件。略


2、编写uart.h和uart.c文件,其中串口配置函数如下:


void USART_Configuration(void)//串口初始化函数

  {  

    UART1_DeInit();

    UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, 

    UART1_PARITY_NO , UART1_SYNCMODE_CLOCK_DISABLE , UART1_MODE_TXRX_ENABLE);

    //波特率,字节数,1个停止位,无奇偶效验位,非同步模式,允许接受和发送

    UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); //打开串口接收中断

    UART1_ITConfig(UART1_IT_TXE, ENABLE);    //打卡串口发送中断

    UART1_Cmd(ENABLE );

   }


3、编写主函数如下:


#include "stm8s.h"

#include "stm8s_clk.h"

#include "led.h"

#include "uart.h"


int main(void)

        CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

LED_Init();

LED1_Close();

        LED2_Close();

        LED3_Close(); 

        enableInterrupts(); //打开中断开关

USART_Configuration(); //配置串口

        UART_send_string("i like.");  //串口发送一个字符串

while(1)

{

           

}

}


4、在stm8s_interrupt.c文件中编写中断处理函数


#pragma vector=0x13

__interrupt void UART1_TX_IRQHandler(void)

{

  UART1_ITConfig(UART1_IT_TXE, DISABLE);     //关闭发送中断

  return;

}

#pragma vector=0x14

__interrupt void UART1_RX_IRQHandler(void)

   u8 u8_data;

   u8_data = UART1_ReceiveData8();

   if (u8_data=='1')

   {  LED1_Open(); LED2_Close();}

   else if (u8_data=='2')

   {  LED1_Close(); LED2_Open();}

   else

   {LED1_Close(); LED2_Close();}

   return;

  

}

#endif


编译下载后,通过串口助手发送1、2可控制led灯的开关。


心得:在发送中断处理函数中一定要记得关闭发送中断,否则会一直触发发送中断导致死循环,在这个问题上耗了两天时间。在需要发送数据时再打开发送中断

关键字:STM8  uart1  串口中断 引用地址:STM8学习笔记---uart1串口中断

上一篇:STM8s串口2异步基本收发使用说明
下一篇:STM8L152C6T6+IAP详解

推荐阅读最新更新时间:2024-11-17 07:02

基于STM8的PCF8563电子时钟实验
实验目的: 通过STM8芯片的两个引脚模拟I2C总线时序来读写PCF8563电子时钟的时间 2. 寄存器结构 3. I2C 总线协议 单片机源程序如下: /*********************************************************************** * 说 明: 点亮第一个发光二极管 * 开发平台: 剑齿虎STM8开发板 * * 作 者: 刘洋 张殿东 * 版 本: V1.0 * 日 期: 2016-05-03 * * IAR开发环境 版本 V2.20.1 * ST库函数 版本 V2.2.0
[单片机]
基于<font color='red'>STM8</font>的PCF8563电子时钟实验
STM8 SPI状态标志
STM8 SPI状态标志 应用程序通过3个状态标志可以完全监控SPI总线的状态。 总线忙(Busy)标志 此标志表明SPI通信层的状态。当它被置1时,表明SPI正忙于通信,并且/或者在发送缓冲器里有一个有效的数据正在等待被发送。此标志的目的是说明在SPI总线上是否有正在进行的通信。以下情况时此标志将被置1: 1. 数据被写进主设备的SPI_DR寄存器上。 2. SCK时钟出现在从设备的时钟引脚上。 发送/接收一个字(字节)完成后,BUSY标志立即清除;此标志由硬件设置和清除。监视此标志可以避免写冲突错误。写此标志无效。仅当SPE位被置1时此标志才有意义。 发送缓冲器空标志(TXE) 此标志被置1时表明发送缓冲器为空,因此下一
[单片机]
STM8 开发环境、最小项目工程、最小系统
一、STM8开发环境 使用STM8需下载下列工具: 1、ST 8bit MCU通用集成开发环境 - ST Visual Develop http://www.st.com/stonline/products/support/micro/files/st7toolset.exe IDE包含代码编辑、汇编编译器、代码调试功能,不含C编译器。同时IDE还自带ST Visual Programer编程软件,支持主流8bit 2、COSMIC C Compiler for STM8 16K Limited http://www.cosmicsoftware.com/download_stm8_16k.php 免费下
[单片机]
<font color='red'>STM8</font> 开发环境、最小项目工程、最小系统
STM8学习笔记三----按键实验
今天做按键的实验。青风的源码中按键的引脚定义似乎有错,和开发板原理图中的不一致。 正确的引脚定义应该是: #define KEY3_PIN GPIO_PIN_3 #define KEY2_PIN GPIO_PIN_4 #define KEY1_PIN GPIO_PIN_0 #define KEY3_PORT GPIOE #define KEY2_PORT GPIOE #define KEY1_PORT GPIOI 我编写的main主函数代码: #include stm8s.h #include stm8s_clk.h #include led.h #include ke
[单片机]
实验4 按键
按键实验电路如下,10K电阻与按键串联在VCC与GND之间,当按键没有按下时,PB2处的电压为5V,即高电平;当按键按下时,PB2处的电压为0V,即低电平。 一、库函数 1、打开DAHUME MINI.stw文件; 2、在STVD左侧Workspace窗口Source Files目录下找到main.c,双击打开; 3、setup();函数代码如下,pinMode(PB2, INPUT);即将PB2引脚设置为输入模式; void setup(void) { delay(10); CLOCK(_16MHz); pinMode(PC1, OUTPUT); pinMode(PB2, INPUT); } 4、主函数代码如
[单片机]
实验4 按键
#C51串口通讯2-#一串数据#定时中断实现超时接收
一.场景 实现一串非固定长度的数据接收,并返回对应数据(数据解析的基础框架) 二.编程实现 1.设计思想 借助T0定时器,不断的计数+1 接收到一帧数据(1Byte)后,串口中断服务函数将定时器T0计数清0(类似喂狗),并创建一个计数标志 一帧数据(1Byte)长度约为1.04ms 。当串口中断数据接收完毕后,短时间无有效数据接收并进入中断服务函数,此时T0计数器不被清0,不断累加 持续检测到大于固定时间时,认为此刻一串数据已传输完毕。 固定时间间隔一般设置3-5倍的一帧数据长度(1.04ms) 2.代码设计 主函数暂时处理为返回接收到的字符串 UART中断服务函数处理: 接收到一个字节,打开T0计数软件标志,清一次计数器
[单片机]
#C51<font color='red'>串口</font>通讯2-#一串数据#定时<font color='red'>中断</font>实现超时接收
stm32 freertos 之串口中断
一、中断处理函数 void USART1_IRQHandler(void) { BaseType_t xHigherPriorityTaskWoken; xHigherPriorityTaskWoken = pdFALSE; u8 cChar; if(USART_GetITStatus (USART1,USART_IT_RXNE)!=RESET) { cChar=USART_ReceiveData(USART1); xQueueSendToBackFromISR (xQueueRx,&cChar,&xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPri
[单片机]
STM8学习笔记(一):GPIO
昨天晚上焊好了一块STM8最小系统板,能跑,能下载 晚上弄了一晚上。。。什么也没有收获 可能受STM32的影响,一直想用它本身的库,结果一直郁闷了半天 不行,不用它本身的库 上网看了下一个操作LED的例程 自己看了下几个GPIO的寄存器 主要有下面几个 1、端口 x 输出数据寄存器 (Px_ODR) 在输出模式下,写入寄存器的数值通过锁存器加到相应的引脚上。读ODR寄存器,返回之前锁存的寄存器值。 在输入模式下,写入ODR的值将被锁存到寄存器中,但不会改变引脚状态。ODR寄存器在复位后总是为0。位操作指令(BSET, BRST) 可以用来设置DR寄存器来驱动相应的引脚,但不会影响到其他引脚。 2、端口 x 输入寄
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved