STM8、STM8S003F3P6 双机串口通信(片上串口)

这篇具有很好参考价值的文章主要介绍了STM8、STM8S003F3P6 双机串口通信(片上串口)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

这里为什么要写串口通信,因为实际项目上使用了串口,STM8S003F3P6的串口简单啊,不值得一提。本文写的串口确实简单,因为这里我想先从简单的写起来,慢慢的把难的引出来。这里呢,做个提纲说明,本文设计的串口,是使用STM8S003F3P6片上的串口。由于STM8S003F3P6资源有限,双机通信资源时常不够,下篇文章提出用IO模拟串口的方式进行数据收发。

原理图

实际涉及原理图如下图所示,比较简单

就是采用STM8S003F3P6的PD5/PD6管脚进行串口收发

STM8、STM8S003F3P6 双机串口通信(片上串口)

STM8、STM8S003F3P6 双机串口通信(片上串口)

 从STM8S003F3P6的对应手册中可以看出来

PD5/PD6对应的串口1

uart1,如下图所示

STM8、STM8S003F3P6 双机串口通信(片上串口)

STM8S003F3P6串口的基本特性,这里看STM8S003F3P6支持的串口功能还是很多的

异步通信串口、LIN等模式

实际上本文使用的模式就是异步串口通信,这也是最常用的一种方式

STM8、STM8S003F3P6 双机串口通信(片上串口)

 软件设计

串口的初始化操作,这里比较简单就是配置串口,打开串口中断

对了,这里波特率选择9600,很多波特率都是用115200,这里着重提一下,STM8最好波特率都使用115200,波特率太高容易导致数据丢失。STM32调试倒是没有这个问题。

/************************************************
函数名称 : UART_Initializes
功    能 : UART初始化
参    数 : 无
返 回 值 : 无
作    者 : 
*************************************************/
void UART_Initializes(void)
{
  UART1_Init((uint32_t)9600, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
  UART1_Cmd(ENABLE);
  //enableInterrupts();
}

主频配置,这里采用内部HSI,主频16M


/************************************************
函数名称 : CLK_Configuration
功    能 : 时钟配置
参    数 : 无
返 回 值 : 无
作    者 : 
*************************************************/
void CLK_Configuration(void)
{
/*
  ErrorStatus clk_return_status;
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8); //HSI = 16M (8分频)=2MHZ
  
  //切换内部低速时钟128khz
  clk_return_status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_LSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
  if (clk_return_status == SUCCESS)  //SUCCESS or ERROR
  {
                              
    CLK_ClockSwitchCmd(ENABLE);
    CLK_LSICmd(ENABLE);
    CLK_ClockSwitchCmd(DISABLE);                              
  }*/
 // CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (1分频)
  //ErrorStatus clk_return_status;
  
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //HSI = 16M (8分频)=2MHZ
 /* 
  //切换内部低速时钟8M
  clk_return_status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
  if (clk_return_status == SUCCESS)  //SUCCESS or ERROR
  {
                              
    CLK_ClockSwitchCmd(ENABLE);
    CLK_HSECmd(ENABLE);
    CLK_ClockSwitchCmd(DISABLE);                              
  }*/
}

串口接收中断函数

串口接收中断函数中,需要把接收到的串口字节读取走

如下代码,将数据放到缓存中

/**
  * @brief UART1 RX Interrupt routine.
  * @param  None
  * @retval None
  */

uint8_t com_in = 0;
uint8_t com_out = 0;
uint8_t com_rv_buf[MAX_COM_RV_BUF];
 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
 {
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */ 
    uint8_t tmp,index;
    tmp = UART1_ReceiveData8();
    index = (com_in + 1) & (MAX_COM_RV_BUF - 1);
    if (index != com_out)
    {  
        com_rv_buf[com_in] = tmp;
        com_in++;
    	com_in &= (MAX_COM_RV_BUF - 1);
    }
 }

串口发送函数,先实现发送一个字节,然后实现发送多个字节的函数

/************************************************
函数名称 : UART1_Printf
功    能 : 串口1打印输出
参    数 : String --- 字符串
返 回 值 : 无
作    者 : 
*************************************************/
void UART1_Printf(uint8_t *String)
{
  RE485_TX;
  while((*String) != '\0')
  {
    UART1_SendByte(*String);
    String++;
  }
  RE485_RX;
}
/************************************************
函数名称 : UART1_SendByte
功    能 : UART1发送一个字符
参    数 : Data --- 数据
返 回 值 : 无
作    者 : 
*************************************************/
void UART1_SendByte(uint8_t Data)
{
  while((UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET));
  UART1_SendData8(Data);
  while((UART1_GetFlagStatus(UART1_FLAG_TC)==RESET));
}

总结:本文设计的串口,是使用STM8S003F3P6片上的串口。由于STM8S003F3P6资源有限,双机通信资源时常不够,下篇文章提出用IO模拟串口的方式进行数据收发。文章来源地址https://www.toymoban.com/news/detail-464453.html

到了这里,关于STM8、STM8S003F3P6 双机串口通信(片上串口)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 基于51单片机的双机串口通信排队叫号系统(LCD显示)设计

    基于51单片机的双机串口通信排队叫号系统(LCD显示)设计

    仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号:A0006 基于51单片机的双机串口通信排队叫号系统(LCD显示)设计 结合实际情况,基于51单片机设计一个排队叫号系统设计。该系统应满足的功能要求为: 由51单片机、按键模块、LCD1602液晶屏、蜂鸣器呼叫模块构成 具

    2024年02月04日
    浏览(13)
  • PY32F003F18P单片机概述

    PY32F003F18P单片机概述

    PY32F003F18P单片机是普冉的一款ARM微控制器,内核是Cortex-M0。这个单片机的特色,就是价格便宜,FLASH和SRAM远远超过8位单片机,市场竞争力很强大。 一、硬件资源: 1)、FLASH为64K字节; 2)、SRAM为8K字节; 3)、定时器: 高级定时器有1个,为TIM1;通用定时器有4个,分别为TIM3,

    2024年02月10日
    浏览(11)
  • 【IAR工程】STM8S基于ST标准库读取DHT11数据

    【IAR工程】STM8S基于ST标准库读取DHT11数据

    ✨申明:本文章仅发表在CSDN网站,任何其他网站,未注明来源,见此内容均为盗链和爬取,请多多尊重和支持原创! 🍁对于文中所提供的相关资源链接将作不定期更换。 🔖基于ST STM8S/A标准外设库:STSW-STM8069,版本号: 2.3.1 📌STSW-STM8069官方资源下载地址: https://www.st.com/zh/em

    2023年04月25日
    浏览(13)
  • 【IAR工程】STM8S208RB基于ST标准库独立看门狗(IWDG)

    【IAR工程】STM8S208RB基于ST标准库独立看门狗(IWDG)

    📍相关篇《【IAR工程】STM8S208RB基于ST标准库下GPIO点灯示例》 🌿《【IAR工程】STM8S208RB基于ST标准库下EXTI外部中断》 🌿《【IAR工程】STM8S208RB基于ST标准库蜂鸣器(BEEP)驱动》 🌿《【IAR工程】STM8S208RB基于ST标准库下自动唤醒(AWU)》 🔖基于ST STM8S/A标准外设库:STSW-STM8069,版本号:

    2023年04月08日
    浏览(36)
  • STM32 HAL库 SPI主从双机通信

    STM32 HAL库 SPI主从双机通信

    最近因为项目需求,需要在一块板子内实现一个主机和五个从机的通信; 主机平台选用的是STM32F407VGT6,从机平台选用的是STM32F103C8T6;通信总线选用的是SPI总线。在构想是觉得采用SPI进行主从通信会很简单,但在实际开发的过程中,各种坑,通信时而正常时而混乱。不过在不

    2024年01月17日
    浏览(11)
  • STM32 通过HAL库实现双机SPI程序烧录之一SPI双机通信

    STM32 通过HAL库实现双机SPI程序烧录之一SPI双机通信

    主要功能:STM32F407VET6作为主机,STM32F103ZET6作为从机实现F4通过SPI接口发送数据给F1进行串口打印功能 主要是使用STM32cubemx进行相关配置(使用这个软件不能只用于生成代码,要学会读懂生成的每一句代码这样才方便后期调试,不然出现问题根本找不到) 选择Serial Waire进行调试

    2024年02月08日
    浏览(13)
  • stm32 GPIO模拟SPI接口实现双机通信

    一、SPI协议简介     一般主从方式工作,这种模式通常有一个主设备和一个或多个从设备,通常采用的是4根线,它们是MISO(主机输入从机输出)、MOSI(主机输出,针对主机来说)、SCLK(时钟,主机产生)、CS(片选,一般由主机发送或者直接使能,通常为低电平有效) ●

    2023年04月08日
    浏览(10)
  • 【SPI】STM32 SPI 双机通信,SPI从机模式使用

    【SPI】STM32 SPI 双机通信,SPI从机模式使用

    最近要用到STM32的SPI从机模式,从其他板子读SPI数据过来,踩了2天坑,记录一下过程。 (因为hal库提供了三种函数,我调试的过程是阻塞、中断、DMA依次来调试学习的, 这份代码为使用DMA方式的代码。 ) 软件 :keil5、STM32CubeMX 硬件 :两块STM32F103C8T6最小系统 实现功能 :两

    2024年02月17日
    浏览(12)
  • STM32 HAL库 CAN双机通信接收无法进入中断、中断没有反应的解决方法

    STM32 HAL库 CAN双机通信接收无法进入中断、中断没有反应的解决方法

    在调试HAL库下的CAN双机(双F103ZET6)通信时,阻塞轮询接收完全正常,但是中断接收没有反应。翻看了GL的烧脑之路总结(一):Cubemx创建CAN通信工程,无法进入CAN中断的原因这篇文章以后,核实自己的硬件电路没有问题,于是对自己的工程文件进行整理,把 ①HAL_CAN_ConfigFi

    2024年02月04日
    浏览(14)
  • K_A16_003 基于STM32等单片机采集薄膜压力传感器参数串口与OLED0.96双显示

    K_A16_003 基于STM32等单片机采集薄膜压力传感器参数串口与OLED0.96双显示

    单片机型号 测试条件 模块名称 代码功能 STM32F103C8T6 晶振8M/系统时钟72M 薄膜压力传感器模块 STM32F103C8T6驱动薄膜压力传感器模块 串口与OLED0.96双显示 其他资料目录 直戳跳转 厚度 :0.4mm 样式 :薄片状,柔性 触发力 :20g,默认电阻值小于 200kΩ 时触发 压力感应范围 :20g~6kg

    2024年02月05日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包