找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 508|回复: 2
打印 上一主题 下一主题
收起左侧

STC8H单片机 uart接收和发送问题

[复制链接]
跳转到指定楼层
楼主
ID:135050 发表于 2023-10-26 14:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用stc8h官网的例程可以实现收发,然后我设置管脚转换,由于我实际使用的串口是P36,P37
但是我设置了串口的UART1_SW_P36_P37,发现单片机只有发送,没有接收,COM1.RX_Cnt里面的数据一直是0。

原管脚配置代码是

  1. /******************* IO配置函数 *******************/
  2. void    GPIO_config(void)
  3. {
  4.     GPIO_InitTypeDef    GPIO_InitStructure;        //结构定义

  5.     GPIO_InitStructure.Pin  = GPIO_Pin_0 | GPIO_Pin_1;        //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
  6.     GPIO_InitStructure.Mode = GPIO_PullUp;    //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
  7.     GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);    //初始化
  8. }

  9. /***************  串口初始化函数 *****************/
  10. void    UART_config(void)
  11. {
  12.     COMx_InitDefine        COMx_InitStructure;                    //结构定义

  13.     COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;    //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
  14.     COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;            //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用
  15.     COMx_InitStructure.UART_BaudRate  = 115200ul;            //波特率, 一般 110 ~ 115200
  16.     COMx_InitStructure.UART_RxEnable  = ENABLE;                //接收允许,   ENABLE或DISABLE
  17.     COMx_InitStructure.BaudRateDouble = DISABLE;            //波特率加倍, ENABLE或DISABLE
  18.     UART_Configuration(UART1, &COMx_InitStructure);        //初始化串口1 UART1,UART2,UART3,UART4
  19.     NVIC_UART1_Init(ENABLE,Priority_1);        //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
  20. }
复制代码




我修改了P36和P37的代码如下:


  1. void    GPIO_config(void)
  2. {
  3.     GPIO_InitTypeDef    GPIO_InitStructure;        //结构定义

  4.     GPIO_InitStructure.Pin  = GPIO_Pin_6 | GPIO_Pin_7;        //指定要初始化的IO, GPIO_Pin_0 ~ GPIO_Pin_7
  5.     GPIO_InitStructure.Mode = GPIO_PullUp;    //指定IO的输入或输出方式,GPIO_PullUp,GPIO_HighZ,GPIO_OUT_OD,GPIO_OUT_PP
  6.     GPIO_Inilize(GPIO_P3,&GPIO_InitStructure);    //初始化
  7. }

  8. /***************  串口初始化函数 *****************/
  9. void    UART_config(void)
  10. {
  11.    
  12.     COMx_InitDefine        COMx_InitStructure;                    //结构定义

  13.     COMx_InitStructure.UART_Mode      = UART_8bit_BRTx;    //模式, UART_ShiftRight,UART_8bit_BRTx,UART_9bit,UART_9bit_BRTx
  14.     COMx_InitStructure.UART_BRT_Use   = BRT_Timer1;            //选择波特率发生器, BRT_Timer1, BRT_Timer2 (注意: 串口2固定使用
  15.     COMx_InitStructure.UART_BaudRate  = 115200ul;            //波特率, 一般 110 ~ 115200
  16.     COMx_InitStructure.UART_RxEnable  = ENABLE;                //接收允许,   ENABLE或DISABLE
  17.     COMx_InitStructure.BaudRateDouble = DISABLE;            //波特率加倍, ENABLE或DISABLE
  18.     UART_Configuration(UART1, &COMx_InitStructure);        //初始化串口1 UART1,UART2,UART3,UART4
  19.     NVIC_UART1_Init(ENABLE,Priority_1);        //中断使能, ENABLE/DISABLE; 优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3

  20.     UART1_SW(UART1_SW_P36_P37);
  21. }
复制代码

上面配置我只修改了gpio里的GPIO_InitStructure.Pin  = GPIO_Pin_6 | GPIO_Pin_7;  和 uart里面的 UART1_SW(UART1_SW_P36_P37);

10-通过串口1发送命令读写EEPROM测试程序.zip

389.34 KB, 下载次数: 5

官网下载的源码例程

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:467496 发表于 2023-10-26 16:26 | 只看该作者
可能是UART_Configuration(UART1, &COMx_InitStructure);        //初始化串口1 UART1,UART2,UART3,UART4。这句有问题,P36,P37属于串口2,你这个初始化哪个
回复

使用道具 举报

板凳
ID:213173 发表于 2023-10-26 17:53 | 只看该作者
通过设置寄存器P_SW1,串口1切换
//  P_SW1 = 0x00;  //RXD/P3.0, TXD/P3.1
    P_SW1 = 0x40;  //RXD_2/P3.6, TXD_2/P3.7
//  P_SW1 = 0x80;  //RXD_3/P1.6, TXD_3/P1.7
//  P_SW1 = 0xc0;  //RXD_4/P4.3, TXD_4/P4.4
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表