386|2

437

帖子

3

TA的资源

纯净的硅(高级)

楼主
 

【极海APM32M3514电机通用评估板】 串口输出测试 [复制链接]

 

调试串口输出测试。

 

一、硬件部分

 

1.1、串口电路

开发板上自带一路USB转TTL串口电路,PF0和PF1引脚,与外部时钟共用,默认是连接外部晶振。

 

外部晶振部分电路

 

1.2、串口选择USB-TTL

将电阻焊接到USB-TTL端, 程序设置成HSI晶振,参考官方SDK例程,配置串口1没有成功。

 

1.3、配置串口2

查看硬件其他端口可用的串口,就SWD端口更方便连接串口,还不影响其他功能的使用。

 

1.4、串口跳线到SWD

PA14连接到R44

 

二、程序部分

 

2.1、usart.c

#include "main.h"

#if defined (__CC_ARM) || defined (__ICCARM__) || (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050))

/*!
* [url=home.php?mod=space&uid=159083]@brief[/url] Redirect C Library function printf to serial port.
*              After Redirection, you can use printf function.
*
* @param       ch:  The characters that need to be send.
*
* @param       *f:  pointer to a FILE that can recording all information
*              needed to control a stream
*
* @retval      The characters that need to be send.
*
* @note
*/
int fputc(int ch, FILE* f)
{
    /* send a byte of data to the serial port */
    USART_TxData(DEBUG_USART, (uint8_t)ch);

    /* wait for the data to be send  */
    while (USART_ReadStatusFlag(DEBUG_USART, USART_FLAG_TXBE) == RESET);

    return (ch);
}

#elif defined (__GNUC__)

/*!
* @brief       Redirect C Library function printf to serial port.
*              After Redirection, you can use printf function.
*
* @param       ch:  The characters that need to be send.
*
* @retval      The characters that need to be send.
*
* @note
*/
int __io_putchar(int ch)
{
    /* send a byte of data to the serial port */
    USART_TxData(DEBUG_USART, ch);

    /* wait for the data to be send  */
    while (USART_ReadStatusFlag(DEBUG_USART, USART_FLAG_TXBE) == RESET);

    return ch;
}

/*!
* @brief       Redirect C Library function printf to serial port.
*              After Redirection, you can use printf function.
*
* @param       file:  Meaningless in this function.
*
* @param       *ptr:  Buffer pointer for data to be sent.
*
* @param       len:  Length of data to be sent.
*
* @retval      The characters that need to be send.
*
* @note
*/
int _write(int file, char* ptr, int len)
{
    int i;
    for (i = 0; i < len; i++)
    {
        __io_putchar(*ptr++);
    }

    return len;
}

#else
#warning Not supported compiler type
#endif

void init_usart(void)
{
	GPIO_Config_T gpioConfig;
	USART_Config_T usartConfigStruct;

	RCM_EnableAHBPeriphClock(DEBUG_USART_TX_GPIO_CLK | DEBUG_USART_RX_GPIO_CLK);
	RCM_EnableAPB1PeriphClock(DEBUG_USART_CLK);
	
	GPIO_ConfigPinAF(DEBUG_USART_TX_GPIO_PORT, DEBUG_USART_TX_SOURCE, DEBUG_USART_TX_AF);
	//GPIO_ConfigPinAF(DEBUG_USART_RX_GPIO_PORT, DEBUG_USART_RX_SOURCE, DEBUG_USART_RX_AF);
	
	gpioConfig.mode = GPIO_MODE_AF;
	gpioConfig.pin = DEBUG_USART_TX_PIN;
	gpioConfig.speed = GPIO_SPEED_50MHz;
	gpioConfig.outtype = GPIO_OUT_TYPE_PP;
	gpioConfig.pupd = GPIO_PUPD_PU;
	GPIO_Config(DEBUG_USART_TX_GPIO_PORT, &gpioConfig);

//	gpioConfig.pin = DEBUG_USART_RX_PIN;
//	GPIO_Config(DEBUG_USART_RX_GPIO_PORT, &gpioConfig);
	
	usartConfigStruct.baudRate = 115200;
	usartConfigStruct.mode     = USART_MODE_TX_RX;
	usartConfigStruct.hardwareFlowCtrl = USART_FLOW_CTRL_NONE;
	usartConfigStruct.parity   = USART_PARITY_NONE;
	usartConfigStruct.stopBits =  USART_STOP_BIT_1;
	usartConfigStruct.wordLength = USART_WORD_LEN_8B;
	USART_Config(DEBUG_USART, &usartConfigStruct);
	
  USART_Enable(DEBUG_USART);
}

 

2.1、usart.h

#ifndef _USART_H
#define _USART_H

#define DEBUG_USART                        USART2
#define DEBUG_USART_CLK                    RCM_APB1_PERIPH_USART2

#define DEBUG_USART_TX_PIN                 GPIO_PIN_14
#define DEBUG_USART_TX_GPIO_PORT           GPIOA
#define DEBUG_USART_TX_GPIO_CLK            RCM_AHB_PERIPH_GPIOA
#define DEBUG_USART_TX_SOURCE              GPIO_PIN_SOURCE_14
#define DEBUG_USART_TX_AF                  GPIO_AF_PIN1


#define DEBUG_USART_RX_PIN                 GPIO_PIN_13
#define DEBUG_USART_RX_GPIO_PORT           GPIOA
#define DEBUG_USART_RX_GPIO_CLK            RCM_AHB_PERIPH_GPIOA
#define DEBUG_USART_RX_SOURCE              GPIO_PIN_SOURCE_13
#define DEBUG_USART_RX_AF                  GPIO_AF_PIN6

void init_usart(void);

#endif

 

2.3、main.c

#include "main.h"

int main(void)
{
	APM_DelayInit();
	APM_DelayMs(5000);
	
	init_usart();
	init_led();

	while (1)
	{
		led_on();
		GPIO_ClearBit(GPIOA, GPIO_PIN_14);
		APM_DelayMs(100);
		led_off();
		GPIO_SetBit(GPIOA, GPIO_PIN_14);
		APM_DelayMs(100);
		printf("apm32m3514_board_test! \r\n");
	}
}

 

三、程序运行

 

下载程序后,串口打印输出

 

 

 

 

最新回复

swd还能在线下载和调试吗   详情 回复 发表于 2024-12-10 09:40
点赞 关注
 
 

回复
举报

25

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

swd还能在线下载和调试吗

点评

在main程序初始化后,加一个较长时间的延时,在这段时间内下载程序没有问题,不能仿真调试。  详情 回复 发表于 2024-12-10 09:54
 
 
 

回复

437

帖子

3

TA的资源

纯净的硅(高级)

板凳
 
不语arc 发表于 2024-12-10 09:40 swd还能在线下载和调试吗

在main程序初始化后,加一个较长时间的延时,在这段时间内下载程序没有问题,不能仿真调试。

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/5 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表