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

[复制链接]
 楼主| chenqiang10 发表于 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*/

}

 楼主| chenqiang10 发表于 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));
}
 楼主| chenqiang10 发表于 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]);
  
}
 楼主| chenqiang10 发表于 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;
   
}
 楼主| chenqiang10 发表于 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);
}
 楼主| chenqiang10 发表于 2019-2-27 22:29 | 显示全部楼层
打包的串口工程如下:

4-Uart.rar

54.43 KB, 下载次数: 18

晓伍 发表于 2019-3-11 12:10 | 显示全部楼层
中断里边的处理函数呢
八层楼 发表于 2019-3-11 12:54 | 显示全部楼层
函数写的非常清晰
guanjiaer 发表于 2019-3-11 13:02 | 显示全部楼层
很想问一个问题 能用同一个芯片的 一个串口给另一个串口发送数据吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

940

帖子

1

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