CYPRESS S6E1C3 系列 FM0+ 32位单片机串口uart0 问题
/-----------------------------前奏-----------------------------------/
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 问题相关推荐
- 对32位单片机串口的理解
文章目录 串行通讯 串行和并行比较 数据帧 波特率 USART模块原理图及主要寄存器 USART框图介绍 主要寄存器 状态寄存器 数据寄存器 控制寄存器 USART发送实现 USART接收实现 总结 ...
- 国产32位单片机有哪些
国产32位单片机有哪些 国产32位单片机有哪些呢 1.兆易创新GD32系列 2.灵动微MM32系列 3.华大HC32系列 4.南京沁恒CH32系列 5.华芯微特SWM32系列 2021年单片机价格 国 ...
- 国产32位单片机有哪些?
我们都知道,与国外相比,国产的32位单片机在质量上和可靠性上方面确实存在一定的差距.但是2020年一场突如其来的疫情,让单片机的价格迅速上涨,尤其是依赖海外芯片的涨幅尤为明显,比如恩智浦.ST等单片机 ...
- 合泰32位单片机入门/以HT32F52352为例
合泰32位单片机入门/以HT32F52352为例 Hi!很高兴看到你.以前经常在CSDN上查找资料,经常能找到想要的,因此也希望在此分享自己的学习心得与收获.32位的单片机其实都差不多,很多内核都是A ...
- 嵌入式入门-32位单片机简介
一.单片机 参见单片机_百度百科 这是单片机的基本介绍,千篇一律搬运工的工作就不打算浪费时间了,就从目前学习到的知识面总结一下单片机吧,当然,入行不到两个月菜狗一枚,不正之处请指正. 单片机,也就是微 ...
- 华为相机M系列交叉编译32位openssl
华为相机M系列交叉编译32位openssl 程序需要从64位相机系统,移植到32位相机系统(M系列),按照之前64位编译步骤./config no-shared no-asm --prefix=/yo ...
- 32位单片机 一个32位地址代表一个字节而不是4个字节(32位)
在数据手册上,BSRR的偏移地址为0X18,然后手册讲完BSRR后直接讲LCKR了,并且LCKR的偏移地址是 OX1C .所以根据 OX1C-0X18=0X04 就知道BSRR是32位寄存器了.因为一 ...
- 分享一款电机控制国产32位单片机MM32SPIN360C
国产32位单片机MM32SPIN360C拥有M0内核的高性能32位微控制器,5V输出的LDO稳压器.三组具备有自举二极管的N通道半桥栅极驱动器.MCU最高工作频率可达96MHz,并内置SRAM高速存储 ...
- 灵动微32位单片机LQFP64引脚MM32F3273G7P
灵动微MM32F3273G7P采用ARM®Cortex®-M3内核的高性能32位单片机,工作频率高达120兆赫兹,内置512KB Flash和128KB RAM的高速存储器,具有丰富的I/O端口和外设 ...
最新文章
- ie8下jquery改变PNG的opacity出现黑边,ie6下png透明解决办法
- P3694-邦邦的大合唱站队【状压dp】
- Kewail-邮件短信接口的基础教程
- php中用date()取出的当前时间查8个小时的解决方法。
- Maven下载安装旧版本
- c51汇编语言位操作,51单片机汇编语言教程之单片机位操作指令的详细资料说明...
- 越南大老二,游戏规则说明
- hdu6287 口算训练
- 这3个快速开发平台,前后端都有,强推
- java获取月份有几周_java 获取当前日期是本月的第几周,且当月一共有几周
- 设计模式-单例模式-注册式单例模式-枚举式单例模式和容器式单例模式在Java中的使用示例
- 有一种爱 不能称之为爱情
- html格式显示图标异常,HTM或HTML图标变成无法显示和识别的解决方法大全
- EF 配置Oracle数据库 EF ORA-01918: 用户 'dbo' 不存在
- 大容量U盘制作USB多重系统启动盘初探
- 跨域图片资源权限(CORS enabled image)
- USB-serial驱动分析(usb转串口)
- 视网膜眼底图像预测心脏病风险:Nature综述深度学习在生物医疗中的新应用
- 微课竞赛系统的设计与实现所需工作条件_快速微课制作方法
- 快速把数据转换成excel
热门文章
- 变脸软件成犯罪帮凶​,上万个限用微信号被“复活”
- 牛逼了!DeepFake变脸再次来袭,强势霸屏GitHub热榜!偏门应用“美女脱衣”还会再出现么?...
- 认识Oracle DBFS文件系统
- 全国省级常住人口搜集指南
- xiaopiu简单使用
- python系统编程
- anaconda+pycharm安装
- html 状态栏不显示文字,电脑打字的时候输入法不显示状态栏怎么办?
- 为何演网络电影?吕良伟:帮青年导演圆电影梦
- python常用基础库:标准库和第三方库