历史上的今天
返回首页

历史上的今天

今天是:2024年11月28日(星期四)

正在发生

2019年11月28日 | STM8S103之串口查询发送+中断发送

2019-11-28 来源:eefocus

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


电脑平台:Windows7 64位旗舰

编译软件:IAR

硬件平台: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  {

    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     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("Hin",3);                //查询发送

  Set_UART1Interrupt("Hellon",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; 

 }

推荐阅读

史海拾趣

驰芯微(CHIPWISE)公司的发展小趣事

驰芯微公司自2014年成立以来,就立志于打破国外芯片厂商在车规级芯片领域的垄断。初创时期,公司面临着资金短缺、技术壁垒高和市场竞争激烈的挑战。然而,驰芯微团队凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一系列车规级智能传感和控制芯片,并逐渐在行业中崭露头角。经过数年的努力,驰芯微已经成为国内车规级芯片领域的领军者,其产品广泛应用于各类前装量产车型。

Coors Components Inc公司的发展小趣事

在面对激烈的市场竞争时,Coors Components Inc公司果断调整市场策略,将目标市场从高端用户转向中端市场。通过优化产品线、提升服务质量以及加强品牌营销,公司成功吸引了大量中端市场的消费者。这一策略调整不仅使公司的销售额大幅提升,还为其未来的发展奠定了坚实的基础。

Enterpoint公司的发展小趣事

在Enterpoint公司的发展过程中,他们始终将客户服务放在首位。公司建立了一套完善的客户服务体系,为客户提供从产品咨询、技术支持到售后服务的全方位支持。这种对客户的关注和投入,不仅赢得了客户的信任和好评,也为公司的品牌建设打下了坚实的基础。

Adafruit公司的发展小趣事

为了进一步扩大市场份额,Enterpoint公司开始积极拓展国际市场。他们通过参加国际电子展会、建立海外销售网络等方式,不断提升品牌知名度和影响力。同时,公司还积极寻求与国际知名企业的合作机会,通过技术交流和产品合作,不断提升自身的技术实力和产品质量。

Altitude Technology公司的发展小趣事

在电子行业中,合作与共赢是企业发展的重要途径。Altitude Technology深知这一点,因此积极寻求与其他企业的合作机会。通过与一家知名芯片制造商建立战略合作关系,Altitude Technology获得了更先进的芯片供应和技术支持,进一步提升了产品的竞争力。同时,公司还与其他企业开展了一系列合作项目,共同推动电子行业的发展。

AAEON公司的发展小趣事

随着公司的不断发展,Altitude Technology逐渐在电子行业中崭露头角。然而,市场竞争也日趋激烈,为了保持领先地位,公司决定加大研发投入,致力于技术突破。经过长时间的研发,Altitude Technology成功推出了一款采用最新芯片技术的智能手机,这款手机在性能、功耗和拍照效果等方面均达到了行业领先水平,为公司赢得了更多的市场份额。

问答坊 | AI 解惑

ADSL线路测试技术

作为一种基于普通电话双绞线的传输技术,ADSL对物理传输线路有很大的依赖性。环路的特征将对ADSL服务的质量和性能级别产生决定性影响。首先在业务开通时会遇到如何选择ADSL线路,某条线路能否开通ADSL业务,可以开通的速率是多少,影响传输质量的原 ...…

查看全部问答>

玩网页游戏会关机

电脑进入正常,玩中游也正常,但只要是一玩网页游戏就会自动关机,检测电源显卡正常…

查看全部问答>

请问rtl8309如何控制其PHY寄存器

RTL8309的资料好少,我在网络上有找到通过SMI接口协议来操作寄存器的,能通过主芯片和8309之间的I2C来进行通信,然后控制寄存器吗?…

查看全部问答>

我两台机器的网卡都是百兆网卡,测速软件报告网速最高只有 26 Mbps,为什么呢?

我两台机器的网卡都是百兆网卡,我用测试软件测试了一下网速,能达到 26 Mbps,离 100 Mbps 还有很远呢!这是为什么呢? 我用的是直连网线。 我很关心 怎样能让测试结果非常接近 100 Mbps ? …

查看全部问答>

如何防止WINCE 5.0 多镜像地址空间重叠?

在config.bib中把CE镜像划分为了4个部分,例如: KERNEL.BIN,DRIVER.BIN,APP.BIN,NK.BIN 这样做以便后期对单个镜像文件升级,现在问题来了,每个BIN文件中的DLL在SLOT0,SLOT1中所占用的地址空间都是在编译器时计算好的。如果后面我的APP.BIN变化 ...…

查看全部问答>

无铅制造时代,恒温烙铁焊台大可借鉴蓄水池效应

    很多价格昂贵的无铅焊台都喜欢强调和炫耀瞬间强大的温度恢复能力,其实这个有一些钻牛角尖的做法,虽然性能是上去了,但焊台本身的总体制造成本以及使用成本也跟着抬高,势必转嫁到最终用户身上。       &nb ...…

查看全部问答>

被MSP430F2013的SPI搞死了

本来打算用2013做16位AD,然后将数据用SPI传送给149的,做的时候才发现,2013的资料实在是太少了,特别是中文资料,反复看了例程,网上的,TI的,到现在还没有能通讯上,哎,2013这个东东怎么看都和先前的片子不一样,149,133资料多,好用,看来2xxx的麻烦死了. ...…

查看全部问答>

请问arm寄存器的C#与R#表示

刚刚开始学arm,手册上写寄存器都是R15,R**的,但是看到代码里用的就是C0,C几的,请问这是为什么,有对应关系么? 谢谢。…

查看全部问答>