STM8S003F串口发送接收



一、前言

本次使用STM8S003F芯片,编译环境为IAR,至于新建工程什么的教程很多,这里就不多叙述了。

二、串口初始化

串口使用的485的方式,所以首先初始化串口和IO口

#define RS485_GPIO_PORT (GPIOD)
#define RS485_GPIO_PINS (GPIO_PIN_4)

#define RS485_SEND GPIO_WriteHigh(RS485_GPIO_PORT, (GPIO_Pin_TypeDef)RS485_GPIO_PINS);
#define RS485_RECEIVE GPIO_WriteLow(RS485_GPIO_PORT, (GPIO_Pin_TypeDef)RS485_GPIO_PINS);

GPIO_Init(RS485_GPIO_PORT, (GPIO_Pin_TypeDef)RS485_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST);

static void UART1_Config(void)
{
  /* UART1 configured as follow:
          - Word Length = 8 Bits
          - 1 Stop Bit
          - No parity
          - BaudRate = 19200 baud
          - UART1 Clock enabled
          - Polarity Low
          - Phase Middle
          - Last Bit enabled
          - Receive and transmit enabled
   */

  /* Enable the UART1 peripheral */
  // UART1_DeInit();
  UART1_Init((uint32_t)BAUDRATE, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
             (UART1_SyncMode_TypeDef)(UART1_SYNCMODE_CLOCK_DISABLE),
             UART1_MODE_TXRX_ENABLE);

  /* Enable the UART1 Receive interrupts */
  UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);

  UART1_ITConfig(UART1_IT_IDLE, ENABLE);

  UART1_Cmd(ENABLE);

  /* Enable general interrupts */
  enableInterrupts();
}

串口使用接收中断+空闲中断的方式接收串口收到的信息。

三、串口发送接收

在串口中断里调用中断函数:

extern void UART1_IRQHandler(void);

INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
 {
   UART1_IRQHandler();
    /* In order to detect unexpected events during development,
       it is recommended to set a breakpoint on the following instruction.
    */
 }

在中断函数里实现发送接收,便于修改:

void UART1_IRQHandler(void)
{
  if (UART1_GetITStatus(UART1_IT_RXNE) != RESET)
  {
    /* Read the received data */
    
    RxBuffer[RxIndex] = UART1_ReceiveData8();
    
    RxIndex++;
    if (RxIndex == RxBufferSize)
    {
      RxIndex = 0;
    }
    UART1_ClearITPendingBit(UART1_IT_RXNE);
  }

  else if (UART1_GetITStatus(UART1_IT_IDLE) != RESET)
  {
    //这里处理接收到的信息
    RxIndex = 0;
    UART1->SR;//执行这两句可以,清除空闲中断 , //空闲中断没有单独的清除函数
    UART1->DR;//执行这两句可以,清除空闲中断, //空闲中断没有单独的清除函数
    //UART1_ClearITPendingBit(UART1_IT_IDLE);
    /* Process the received data*/
    //GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
  }
}

对了,还有宏定义可以修改接收长度:

#define RxBufferSize 8
#define TxBufferSize 8
#define BAUDRATE 19200
uint8_t TxBuffer[TxBufferSize];
uint8_t RxBuffer[RxBufferSize];
uint8_t RxIndex = 0;
uint8_t TxIndex = 0;

STM8S003STMicroelectronics公司推出的一款8位微控制器。它具有低功耗、高性能、多种外设和丰富的接口选择等特点,适用于各种嵌入式应用。 下面是一个简单的STM8S003串口例程: 1. 首先,需要在开发环境中创建一个新的工程并选择STM8S003微控制器作为目标设备。 2. 在工程中添加必要的头文件,例如"stm8s.h"和"stm8s_uart1.h"。 3. 配置串口参数,比如波特率、数据位、停止位和校验位等。可以使用UART1_Init函数进行配置。 4. 初始化串口,并启用接收中断。使用UART1_Init函数初始化串口,并使用UART1_ITConfig函数启用接收中断。 5. 在主函数中,编写串口发送函数和接收函数。使用UART1_SendData函数发送数据,使用UART1_Receive函数接收数据。 6. 在主循环中,可以通过发送函数发送指定的数据。可以使用GPIO_ToggleBits函数控制一个引脚的状态,用来指示数据发送接收的情况。 7. 在接收中断函数中,可以通过判断接收到的数据来执行相应的操作。例如,如果接收到某个字符,可以执行相应的功能。 8. 最后,将工程编译、烧录到目标硬件中,并运行程序。可以使用一个串口终端软件来查看串口发送接收情况。 这是一个简单的STM8S003串口例程,可以通过这个例程来学习和了解STM8S003串口通信。需要注意的是,具体的代码实现可能因开发环境的不同而有所差异,可以根据具体的开发环境和需要进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

k-kun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值