打印
[STM32L0]

STM32L031测评之:玩玩串口

[复制链接]
4796|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
经过上一次的帖子,简单介绍过cube的使用后STM32L031测评之:用cube点亮你的LED,这次我们继续用cube来玩串口第一步:使用uart2(STM32L031K6 NUCLEO32使用USART2连接stlink 的vcp)所以我们不需要另外的转串口工具
我们采用异步串口,所以选用Asynchronous

第二步:配置USART的参数,我们采用115200,8-n-1配置
1、点击configuration:
2、双击connectivity中的USART2
3、Baud Rate选项输入115200
4、Word Length 选择8bit,其他保持默认
5、使能中断
6、点击Apply,OK



第三步:编写主函数
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART2_UART_Init();

  /* USER CODE BEGIN 2 */
    printf("%s\r\n", "UART2 实验------");
        printf("硬件平台:%s\r\n", "STM32L031K6 NUCLEO32");
    printf("This is a UART2 Demo \r\n" );
        printf("("__DATE__ " - " __TIME__ ") \r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}
这里用到了printf函数,所以需要重定向
在usart.c添加以下代码:
#pragma import(__use_no_semihosting)             
            
struct __FILE
{
    int handle;
    /* Whatever you require here. If the only file you are using is */
    /* standard output using printf() for debugging, no file handling */
    /* is required. */
};
/* FILE is typedef’ d in stdio.h. */
FILE __stdout;      

void _sys_exit(int x)
{
    x = x;
}

int fputc(int ch, FILE *f)
{      
    while( (USART2->ISR&0x40) == 0 );  
    USART2->TDR = (uint8_t) ch;      
    return ch;
}
实现现象:


上传工程代码: STM32L031_USART.rar (4.2 MB)

沙发
Aires| | 2016-7-12 21:15 | 只看该作者
博主您好,我刚刚开始用stm32l051c8t6,在串口调试中遇到问题,工程的发送没问题,但在串口中总只打印一个字节,工程参考了博主的还是一样的只显示一个字,想问下博主有没有遇到这样的问题,有没有什么方法可以解决的

使用特权

评论回复
板凳
zhuomuniao110| | 2016-7-13 00:32 | 只看该作者
这关系到如何让Printf函数利用串口输出的问题。

使用特权

评论回复
地板
黑夜之狼|  楼主 | 2016-7-13 08:58 | 只看该作者
Aires 发表于 2016-7-12 21:15
博主您好,我刚刚开始用stm32l051c8t6,在串口调试中遇到问题,工程的发送没问题,但在串口中总只打印一个 ...

具体描述下情况?

使用特权

评论回复
5
Aires| | 2016-7-13 11:08 | 只看该作者

我用的STM32CubeMX(STM32L0 1.7.0)生成环境工程来的,比如发送0123456789,他只发送0之后再按发送没有反应了,有尝试修改,结果是按一次发送就发一次0。再改想让他一次性发送完全部的信息(设置起始标志之类的),结果是什么都不发送了。他的中断回调函数好像就只进入一次。。。。

使用特权

评论回复
6
小欧阳11| | 2018-7-6 16:40 | 只看该作者
这个意思是发什么收什么吗

使用特权

评论回复
7
yuyuesunny| | 2018-7-6 17:21 | 只看该作者
Aires 发表于 2016-7-13 11:08
我用的STM32CubeMX(STM32L0 1.7.0)生成环境工程来的,比如发送0123456789,他只发送0之后再按发送没有 ...

想好每次发什么内容,长度是多少。是循环发还是单独发

使用特权

评论回复
8
huangcunxiake| | 2018-7-6 21:22 | 只看该作者
666,这个工具真是强大。

使用特权

评论回复
9
qq821865955| | 2019-9-4 14:30 | 只看该作者
本帖最后由 qq821865955 于 2019-9-4 16:24 编辑

请问博主能否分享下这个调试工具,谢谢。

使用特权

评论回复
10
黑夜之狼|  楼主 | 2019-9-6 09:33 | 只看该作者
qq821865955 发表于 2019-9-4 14:30
请问博主能否分享下这个调试工具,谢谢。

网上很多下载

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:代理中颖MCU,可技术交流,欢迎私信骚扰

18

主题

1205

帖子

11

粉丝