你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8L051F3串口调试不通

[复制链接]
HYP 提问时间:2016-12-1 15:29 /
最近刚刚接触stm8,在使用串口的时候,死活的调试不通,请教万能的大神们
串口配置
void Uart1_Init(void)
{
          CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
        GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_Out_PP_High_Fast);//TXD
          GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_In_PU_No_IT);//RXD
           GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2, ENABLE);
                  GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_3, ENABLE);
          USART_DeInit(USART1);                //复位UART1
        /*
         * 将UART1配置为:
         * 波特率 = 115200
         * 数据位 = 8
         * 1位停止位
         * 无校验位
         * 使能接收和发送
         */
         
        USART_Init(USART1, (u32)9600, USART_WordLength_8b, USART_StopBits_1,
                                USART_Parity_No, USART_Mode_Tx|USART_Mode_Rx);
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);
        USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启接收中断
        USART_ITConfig(USART1, USART_IT_TC, ENABLE);//开启接收中断
        USART_Cmd(USART1, ENABLE);        //使能UART2
}


main()
{
                CLK_HSICmd(ENABLE);
                CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
                while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);
                  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

Uart1_Init();

while(1)
{
Delay_ms(20);
USART_SendData8(USART1, 0xfb);//在进入这个函数时经常提示 参数无效,而且数据寄存器中一直都是0x00,而且直接给该寄存器写值也写不进去
while(SART_GetFlagStatus( USART1, USART_FLAG_TC) == RESET);

}
       

}
代码就这么点,但就是没有数据,而且直接给USART1-DR赋值也没用,

收藏 1 评论10 发布时间:2016-12-1 15:29

举报

10个回答
zero99 回答时间:2016-12-1 17:30:43
顶一下
zcl201207 回答时间:2016-12-1 19:50:46
/* Includes ------------------------------------------------------------------*/
#include "stm8l15x.h"
#include "stdio.h"

/** @addtogroup STM8L15x_StdPeriph_Examples
  * @{
  */

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* define the GPIO port and pins connected to Leds mounted on STM8L152X-EVAL board */

#define LED_GPIO_PORT  GPIOB
#define LED_GPIO_PINS  GPIO_Pin_7

#define KEY_GPIO_PORT  GPIOD
#define KEY_GPIO_PINS  GPIO_Pin_2

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void Delay (uint16_t nCount);

#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */

/* Private functions ---------------------------------------------------------*/

/**
  * @brief  Main program.
  * @param  None
  * @retval None
  */
void main(void)
{
  uint8_t ans;
  
  /* Config system clock as: HSI @ 16MHz  */
  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
  
  /* Initialize LEDs mounted on STM8L152X-EVAL board */
  GPIO_Init(LED_GPIO_PORT, LED_GPIO_PINS, GPIO_Mode_Out_PP_High_Fast);
  
   /* Initialize KEYs mounted on STM8L152X-EVAL board */
  GPIO_Init(KEY_GPIO_PORT, KEY_GPIO_PINS, GPIO_Mode_In_PU_No_IT);

  /* USART configured as follow:
        - BaudRate = 115200 baud
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Receive and transmit enabled
        - USART Clock enabled
  */
  /* Enable USART clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
  
  /* USART configuration */
  USART_Init(USART1, (uint32_t)115200, USART_WordLength_8b, USART_StopBits_1,
                USART_Parity_No, (USART_Mode_TypeDef)(USART_Mode_Tx | USART_Mode_Rx));

  /* Output a message on Hyperterminal using printf function */
  printf("\n\rUSART Example: retarget the C library printf() and getchar() functions to the USART\n\r");
  printf("\n\rEnter Text: \n\r");
  
  while (1)
  {
    ans = getchar();
    printf("%c", ans);
  }
}

/**
  * @brief  Inserts a delay time.
  * @param  nCount: specifies the delay time length.
  * @retval None
  */
void Delay(__IO uint16_t nCount)
{
  /* Decrement nCount value */
  while (nCount != 0)
  {
    nCount--;
  }
}
/**
  * @brief Retargets the C library printf function to the USART.
  * @param[in] c Character to send
  * @retval char Character sent
  * @par Required preconditions:
  * - None
  */
PUTCHAR_PROTOTYPE
{
  /* Write a character to the USART */
  USART_SendData8(USART1, c);
  /* Loop until the end of transmission */
  while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

  return (c);
}
/**
  * @brief Retargets the C library scanf function to the USART.
  * @param[in] None
  * @retval char Character to Read
  * @par Required preconditions:
  * - None
  */
GETCHAR_PROTOTYPE
{
  int c = 0;
  /* Loop until the Read data register flag is SET */
  while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
    c = USART_ReceiveData8(USART1);
    return (c);
  }

#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *   where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* Infinite loop */
  while (1)
  {}
}
#endif


/******************************************************/

楼主拿去研究吧。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

HYP 回答时间:2016-12-1 21:36:17
zcl201207 发表于 2016-12-1 19:50
/* Includes ------------------------------------------------------------------*/
#include "stm8l15x. ...

          while (1)
  {
//   ans = getchar();
   while (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET);
                                ans = USART_ReceiveData8(USART1);

    printf("%c", ans);
  }
改成你这样也不行,有没有其他的什么原因可以造成串口出现这样的问题
HYP 回答时间:2016-12-1 21:50:44
我现在怀疑不是程序的问题,是硬件的问题,谁有STM8L051F3的板子,能否帮忙试下我上面的程序,跪求了
ts2000 回答时间:2016-12-2 09:17:32
端口配置不对?
HYP 回答时间:2016-12-2 11:02:19
ts2000 发表于 2016-12-2 09:17
端口配置不对?

void Uart1_Init(void)
{  USART_DeInit(USART1);                //复位UART1
          CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE);
        GPIO_Init(GPIOC, GPIO_Pin_2, GPIO_Mode_Out_PP_High_Fast);//TXD
          GPIO_Init(GPIOC, GPIO_Pin_3, GPIO_Mode_In_PU_No_IT);//RXD
           GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_2, ENABLE);
                  GPIO_ExternalPullUpConfig(GPIOC, GPIO_Pin_3, ENABLE);
        
        /*
         * 将UART1配置为:
         * 波特率 = 115200
         * 数据位 = 8
         * 1位停止位
         * 无校验位
         * 使能接收和发送
         */
         
        USART_Init(USART1, (u32)9600, USART_WordLength_8b, USART_StopBits_1,
                                USART_Parity_No, USART_Mode_Tx|USART_Mode_Rx);
}


main()
{
                CLK_HSICmd(ENABLE);
                CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI);
                while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);
                  CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);

Uart1_Init();

while(1)
{
Delay_ms(20);
USART_SendData8(USART1, 0xfb);//在进入这个函数时经常提示 参数无效,而且数据寄存器中一直都是0x00,而且直接给该寄存器写值也写不进去
while(SART_GetFlagStatus( USART1, USART_FLAG_TC) == RESET);

}

程序改成这样也还是不行,再查看外设寄存器CLK_PCKENR1->USART1也使能了,当就是没有数据发送,用示波器看该输出的引脚完全没有波形而是一直为高电平
HYP 回答时间:2016-12-2 16:12:19
原来是该串口和SPI复用IO口,要先配置好端口映射

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

流浪的猫猫 回答时间:2017-6-5 15:41:06
楼主   分享下 你的端口映射程序  用的PC5 PC6
ninicaoyuan 回答时间:2017-8-14 16:27:33
SYSCFG_REMAPDeInit();                                                            
   SYSCFG_REMAPPinConfig(REMAP_Pin_USART1TxRxPortC,ENABLE);    //复用PC5,PC6为串口
12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版