ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU

[STM8] stm8 开发例程 一些基础外设-------串口

[复制链接]
266|8
 楼主 | 2019-2-27 22:27 | 显示全部楼层 |阅读模式
/**************************************************************************
* 函数名:uart_conf
* 描述  :uart配置函数
* 输入  :无
*
* 输出  :无
* 返回  :无
* 调用  :外部调用
*************************************************************************/
void uart_conf(void)
{
    unsigned int baud_div=0;

    UART1_CR1 = (0<<4)|(0<<3)|(0<<2)|(0<<1)|(0<<0);
    /*1位起始位 8位数据位 结束位由CR3设置 不使用奇偶校验 不使能奇偶校验中断*/
    UART1_CR2 = (0<<7)|(0<<6)|(1<<5)|(0<<4)|(1<<3)|(1<<2);
    /*使能发送和接收 接收中断使能 禁止发送中断*/
    UART1_CR3 = (0<<6)|(0<<4)|(0<<3); /*设置1位停止位 不使能SCLK*/        
    UART1_CR5 = (0<<2)|(0<<1);     
    /*使用智能卡模式需要设置的,基本上保持默认就行了 */

    /*设置波特率*/
    baud_div =HSIClockFreq/BaudRate;  /*求出分频因子*/
    UART1_BRR2 = baud_div & 0x0f;
    UART1_BRR2 |= ((baud_div & 0xf000) >> 8);
    UART1_BRR1 = ((baud_div & 0x0ff0) >> 4);    /*先给BRR2赋值 最后再设置BRR1*/

    UART1_CR1 |= (0<<5);         /*使能UART*/

}

 楼主 | 2019-2-27 22:27 | 显示全部楼层
/**************************************************************************
* 函数名:UART1_SendByte
* 描述  :uart发送一个字节
* 输入  :u8 data
*
* 输出  :无
* 返回  :无
* 调用  :外部调用
* 举例  :UART1_SendByte('a')
*************************************************************************/
void UART1_SendByte(u8 data)
{
   
    UART1_DR=data;
   /* Loop until the end of transmission */
   while (!(UART1_SR & UART1_FLAG_TXE));
}

使用特权

评论回复
 楼主 | 2019-2-27 22:28 | 显示全部楼层
/**********************************************************************************
* 函数名:UART1_SendByte
* 描述  :uart发送字符串
* 输入  :u8* Data,u16 len
*
* 输出  :无
* 返回  :无
* 调用  :外部调用
* 举例  :UART1_SendString("iCreate STM8开发板",sizeof("iCreate STM8开发板"))
**********************************************************************************/
void UART1_SendString(u8* Data,u16 len)
{
  u16 i=0;
  for(;i<len;i++)
    UART1_SendByte(Data[i]);
  
}

使用特权

评论回复
 楼主 | 2019-2-27 22:28 | 显示全部楼层
/**********************************************************************************
* 函数名:UART1_ReceiveByte
* 描述  :uart查询接收一个字节
* 输入  :无
*
* 输出  :无
* 返回  :一个字节
* 调用  :外部调用
* 举例  :temp=UART1_ReceiveByte()
**********************************************************************************/
u8 UART1_ReceiveByte(void)
{
     u8 USART1_RX_BUF;
     while (!(UART1_SR & UART1_FLAG_RXNE));
     USART1_RX_BUF=(uint8_t)UART1_DR;
     return  USART1_RX_BUF;
   
}

使用特权

评论回复
 楼主 | 2019-2-27 22:28 | 显示全部楼层
/***********************************************
* 函数名:fputc
* 描述  :重定向c库函数printf到USART1
* 输入  :无
* 输出  :无
* 调用  :由printf调用
***********************************************/
int fputc(int ch, FILE *f)
{  
/*将Printf内容发往串口*/
  UART1_DR=(unsigned char)ch;
  while (!(UART1_SR & UART1_FLAG_TXE));
  return (ch);
}

使用特权

评论回复
 楼主 | 2019-2-27 22:29 | 显示全部楼层
打包的串口工程如下:

4-Uart.rar

54.43 KB, 下载次数: 6

使用特权

评论回复
| 2019-3-11 12:10 | 显示全部楼层
中断里边的处理函数呢

使用特权

评论回复
| 2019-3-11 12:54 | 显示全部楼层
函数写的非常清晰

使用特权

评论回复
| 2019-3-11 13:02 | 显示全部楼层
很想问一个问题 能用同一个芯片的 一个串口给另一个串口发送数据吗

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表