STM8S103之串口查询发送+中断发送

xiaoxiao2021-02-28  68

 

本篇博文最后修改时间:2017年08月04日 18:29。

 

一、简介

本文以STM8S103F3P6编程为例,介绍STM8S103F3P6串口中断发送。

 

二、实验平台

电脑平台:Windows7 64位旗舰

编译软件:IAR

硬件平台:STM8S103F3P6

 

三、版权声明

博主:_懵懂

声明:此博客仅供参考不做任何商业用途,最终解释权归原博主所有。

原文地址:http://blog.csdn.NET/qq_18842031

懵懂之MCU交流群:136384801

 

四、实验前提

1、在进行本文步骤前,请先安装IAR  EWSTM8-EV-1311版本;准备好STM8S103F3P6硬件平台。

         

五、基础知识

暂无

 

六、源码地址

暂无

 

七、实验内容

1.系统时钟初始化为内部16M】

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //时钟 初始化时钟为1分频 16M 2分频8M

 

2.初始化串口

void Init_UART1(void) { UART1_DeInit(); //恢复串口所有寄存器 UART1_Init((u32)9600, //波特率9600 UART1_WORDLENGTH_8D, //8位 UART1_STOPBITS_1, //停止位1 UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE); UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); //使能接收中断 // UART1_ITConfig(UART1_IT_TC, ENABLE); //使能发送中断 发送中断使能是那里需要才使能 UART1_Cmd(ENABLE); }

 

3.编写查询方式发送数据入口

void UART1_Send(uint8_t *dat,uint8_t len) { uint8_t i = 0; for(i=0; i<len; i++) { while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)); UART1_SendData8(*dat++); } }

 

4.编写中断方式发送数据入口

uint8_t Rxd_buf[20]; //接收数组 uint8_t Rxd_len; //接收长度 uint8_t Rxd_F; //接收标志位 uint8_t Txd_buf[20]; //发送数组 uint8_t Txd_len; //发送长度 uint8_t Txd_F; //发送标志位 void Send(uint8_t dat) { while(( UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET)); UART1_SendData8(dat); } uint8_t Set_UART1Interrupt(uint8_t *lV_dat,uint8_t lV_len) { if(Txd_len != 0) { return FALSE; } for(Txd_len=0;Txd_len <lV_len;Txd_len++) //将数据装到全局变量中 Txd_buf[Txd_len]=lV_dat[Txd_len]; UART1_ITConfig(UART1_IT_TC, ENABLE); //使能发送中断 return TRUE; }

 

5.编写主函

void main(void) { CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //内部时钟16M Init_UART1(); enableInterrupts(); UART1_Send("Hi\n",3); //查询发送 Set_UART1Interrupt("Hello\n",6); //中断发送数据 while(1); }

 

6.编写中断服务函数

INTERRUPT_HANDLER(UART1_TX_IRQHandler, 17) { static uint8_t lV_num; //记录已经发送数据的长度 Send(Txd_buf[lV_num++]); if(lV_num == Txd_len) //发送数据的长度和需要发送数据的长度相等 就关闭发送中断 { lV_num = 0; (void) memset(Txd_buf,0,Txd_len); Txd_len = 0; UART1_ITConfig(UART1_IT_TC, DISABLE); //禁止发送中断 } return; }

 

转载请注明原文地址: https://www.6miu.com/read-44763.html

最新回复(0)