/-----------------------------前奏-----------------------------------/

mcu型号s6e1c32c(48pin)、s6e1c32b(32pin)

本次调试:uart0【与SWD 管脚复用】
由于在启动文件中 :跳转到SystemInit ()初始化系统时钟,再跳转到main()。如下:

Reset_Handler
    LDR R0, =SystemInit
    BLX R0
    LDR R0, =__iar_program_start
    BX R0

/-----------------------------实干-----------------------------------/

1,实际在main中,UartInit(115200); printf(“Let us jump …\r\n”); 并不能输出。,

2,原来FM0+ 默认没有给我们开启串口和IO管脚的时钟。需要类似stm32系列 增添代码:

Clk_PeripheralClockEnable(ClkGateGpio);
  Clk_PeripheralClockEnable(ClkGateMfs0);//uart0 时钟

3,再次用J-Link 调试,跑飞了:正常结果。SWD被uart0共用,开启uart0,SWD自然失效。拔掉调试线,换成TTL串口查看信息。还是然并卵!!

被打败了?。。。。。。。。不可能!

4,把uart3 的管脚引出,修改串口初始化代码。 发现有打印信息,谢谢上天。还有希望。

5,问题点可能处在SWD的身上,查看SWD复用配置:SetPinFunc_SWCLK();SetPinFunc_SWDIO();再往里面看[深入~内涵一下]。

里面有定义:bFM_GPIO_EPFR00_SWDEN = 1; 如果关闭SWD功能,即bFM_GPIO_EPFR00_SWDEN = 0; 再开启uart0,能行吗?

6,试了还真行,就是问题所在了。原来在开启uart0功能时,SWD不能自动断开。需要手动操作。

/-----------------------------上代码-----------------------------------/

typedef void (*pFunction)(void);
u32 g_AppAddr = 0x0;

void RemapVTOR();

void ExitIAP(void)
{
u32 JumpAddress;
pFunction Jump_To_Application;
//d_p(“Jump_To_Application\n”);
JumpAddress = (vu32) (g_AppAddr + 4);
Jump_To_Application = (pFunction) JumpAddress;

/* Initialize user application’s Stack Pointer /
__set_MSP(
(vu32*)g_AppAddr);

Jump_To_Application();
}

#define InitUartIo() {SetPinFunc_SIN0_0();SetPinFunc_SOT0_0();}

#define SWD_ON() {SetPinFunc_SWCLK();SetPinFunc_SWDIO();}
#define SWD_OFF() {bFM_GPIO_EPFR00_SWDEN = 0;}

int main(void)

{
//Clk_PeripheralClockEnable(ClkGateGpio);
//Clk_PeripheralClockEnable(ClkGateMfs0);//uart0 时钟
Clk_PeripheralClockEnableAll();//也可以开启全部时钟

//SWD_ON(); //下次调试开启并屏蔽 SWD_OFF();从新下载一遍
UartInit(115200);
printf(“Let us jump …\r\n”);
//RemapVTOR();
ExitIAP();

printf(“Jump faild !\r\n”);
return 0;
}

uart0.c

void UartInit(uint32_t baudrate)
{
stc_uart_irq_en_t stcIntEn;
stc_uart_irq_cb_t stcIrqCb;
stc_mfs_uart_config_t stcUartConfig;

if(UartCh == &UART0)//串口0 复用SWD 需手动关闭
{SWD_OFF();}// 可以再在串口配置前加点延时。

PDL_ZERO_STRUCT(stcUartConfig);

/* Initialize UART function I/O */
InitUartIo();

/* Initialize UART RX/TX interrupt /
stcIntEn.bRxIrq = TRUE;
stcIntEn.bTxIrq = FALSE;
stcIrqCb.pfnRxIrqCb = Uart_RX_IRQHandler;
stcIrqCb.pfnTxIrqCb = NULL;
/
Initialize UART RX/TX channel */
stcUartConfig.enMode = UartNormal;
stcUartConfig.u32BautRate = baudrate;
stcUartConfig.enDataLength = UartEightBits;
stcUartConfig.enParity = UartParityNone;
stcUartConfig.enStopBit = UartOneStopBit;
stcUartConfig.enBitDirection = UartDataLsbFirst;
stcUartConfig.bInvertData = FALSE;
stcUartConfig.bHwFlow = FALSE;
stcUartConfig.pstcFifoConfig = NULL;
stcUartConfig.bUseExtClk = FALSE;
stcUartConfig.pstcIrqEn = &stcIntEn;
stcUartConfig.pstcIrqCb = &stcIrqCb;
stcUartConfig.bTouchNvic = TRUE;
Mfs_Uart_Init(UartCh, &stcUartConfig);

/* Enable TX function of UART0 */
Mfs_Uart_EnableFunc(UartCh, UartRx);
Mfs_Uart_EnableFunc(UartCh, UartTx);

return;
}

void UartSendByte(uint8_t dat)
{
while(TRUE != Mfs_Uart_GetStatus(UartCh, UartTxIdle));
while (TRUE != Mfs_Uart_GetStatus(UartCh, UartTxEmpty)); /* wait until TX buffer empty */
Mfs_Uart_SendData(UartCh, dat);

return;
}

int putchar(int ch)
{
if(ch == ‘\n’)
{
UartSendByte(’\r’);
}
UartSendByte((unsigned char)ch);
return ch;
}

/-----------------------------实际结果-----------------------------------/

每次实现:printf(“Let us jump …\r\n”);

就打印 Let us jump … 并跳转到复位状态,地址 0;

最后一直循环跳转,不停打印

Let us jump …

Let us jump …

Let us jump …

Let us jump …

CYPRESS S6E1C3 系列 FM0+ 32位单片机串口uart0 问题相关推荐

  1. 对32位单片机串口的理解

    文章目录 串行通讯 串行和并行比较 数据帧 波特率 USART模块原理图及主要寄存器 USART框图介绍 主要寄存器 状态寄存器 数据寄存器 控制寄存器 USART发送实现 USART接收实现 总结 ...

  2. 国产32位单片机有哪些

    国产32位单片机有哪些 国产32位单片机有哪些呢 1.兆易创新GD32系列 2.灵动微MM32系列 3.华大HC32系列 4.南京沁恒CH32系列 5.华芯微特SWM32系列 2021年单片机价格 国 ...

  3. 国产32位单片机有哪些?

    我们都知道,与国外相比,国产的32位单片机在质量上和可靠性上方面确实存在一定的差距.但是2020年一场突如其来的疫情,让单片机的价格迅速上涨,尤其是依赖海外芯片的涨幅尤为明显,比如恩智浦.ST等单片机 ...

  4. 合泰32位单片机入门/以HT32F52352为例

    合泰32位单片机入门/以HT32F52352为例 Hi!很高兴看到你.以前经常在CSDN上查找资料,经常能找到想要的,因此也希望在此分享自己的学习心得与收获.32位的单片机其实都差不多,很多内核都是A ...

  5. 嵌入式入门-32位单片机简介

    一.单片机 参见单片机_百度百科 这是单片机的基本介绍,千篇一律搬运工的工作就不打算浪费时间了,就从目前学习到的知识面总结一下单片机吧,当然,入行不到两个月菜狗一枚,不正之处请指正. 单片机,也就是微 ...

  6. 华为相机M系列交叉编译32位openssl

    华为相机M系列交叉编译32位openssl 程序需要从64位相机系统,移植到32位相机系统(M系列),按照之前64位编译步骤./config no-shared no-asm --prefix=/yo ...

  7. 32位单片机 一个32位地址代表一个字节而不是4个字节(32位)

    在数据手册上,BSRR的偏移地址为0X18,然后手册讲完BSRR后直接讲LCKR了,并且LCKR的偏移地址是 OX1C .所以根据 OX1C-0X18=0X04 就知道BSRR是32位寄存器了.因为一 ...

  8. 分享一款电机控制国产32位单片机MM32SPIN360C

    国产32位单片机MM32SPIN360C拥有M0内核的高性能32位微控制器,5V输出的LDO稳压器.三组具备有自举二极管的N通道半桥栅极驱动器.MCU最高工作频率可达96MHz,并内置SRAM高速存储 ...

  9. 灵动微32位单片机LQFP64引脚MM32F3273G7P

    灵动微MM32F3273G7P采用ARM®Cortex®-M3内核的高性能32位单片机,工作频率高达120兆赫兹,内置512KB Flash和128KB RAM的高速存储器,具有丰富的I/O端口和外设 ...

最新文章

  1. ie8下jquery改变PNG的opacity出现黑边,ie6下png透明解决办法
  2. P3694-邦邦的大合唱站队【状压dp】
  3. Kewail-邮件短信接口的基础教程
  4. php中用date()取出的当前时间查8个小时的解决方法。
  5. Maven下载安装旧版本
  6. c51汇编语言位操作,51单片机汇编语言教程之单片机位操作指令的详细资料说明...
  7. 越南大老二,游戏规则说明
  8. hdu6287 口算训练
  9. 这3个快速开发平台,前后端都有,强推
  10. java获取月份有几周_java 获取当前日期是本月的第几周,且当月一共有几周
  11. 设计模式-单例模式-注册式单例模式-枚举式单例模式和容器式单例模式在Java中的使用示例
  12. 有一种爱 不能称之为爱情
  13. html格式显示图标异常,HTM或HTML图标变成无法显示和识别的解决方法大全
  14. EF 配置Oracle数据库 EF ORA-01918: 用户 'dbo' 不存在
  15. 大容量U盘制作USB多重系统启动盘初探
  16. 跨域图片资源权限(CORS enabled image)
  17. USB-serial驱动分析(usb转串口)
  18. 视网膜眼底图像预测心脏病风险:Nature综述深度学习在生物医疗中的新应用
  19. 微课竞赛系统的设计与实现所需工作条件_快速微课制作方法
  20. 快速把数据转换成excel

热门文章

  1. 变脸软件成犯罪帮凶​,上万个限用微信号被“复活”
  2. 牛逼了!DeepFake变脸再次来袭,强势霸屏GitHub热榜!偏门应用“美女脱衣”还会再出现么?...
  3. 认识Oracle DBFS文件系统
  4. 全国省级常住人口搜集指南
  5. xiaopiu简单使用
  6. python系统编程
  7. anaconda+pycharm安装
  8. html 状态栏不显示文字,电脑打字的时候输入法不显示状态栏怎么办?
  9. 为何演网络电影?吕良伟:帮青年导演圆电影梦
  10. python常用基础库:标准库和第三方库