STM32->UART
来源:互联网 发布:卖房软件 编辑:程序博客网 时间:2024/06/05 02:11
在使用STM32过程中,可能会因为没有定义好调试工具的连接管脚,例如JTAG和SW需要的管脚被程序重新初始化复用了,然后就没法调试变砖了,此时可以通过ISP的方式擦写flash,或者跳线重启,进入BootLoader模式用JLink下载新的程序或直接擦除MCU的flash,再把跳线改回来重启。
通过串口printf打印输出,添加C语言标准库文件:
#include "stdio.h"
根据编译器定义改写相关函数
#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
根据自己的串口收发改写相应的函数:
int fputc(int ch, FILE *f)
{
USART1->DR=(uint8_t)ch;
while((USART1->SR&0X40)==0);
return ch;
}
int fputc(int ch, FILE *f)
{
Write_Usart1_C((uint8_t) ch);
return(ch);
}
int fgetc(FILE *f)
{
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
return (USART_ReceiveData(USART1));
}
}
如果使用HAL库:
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1 ,(uint8_t *)&ch, 1, 0xFFFF);
return ch;
}
然后就可以使用C语言的标准输出:printf(" test good! \n");
在C99中printf原型:
int __cdecl printf(const char * __restrict__ _Format,...)
在使用标准库和C99环境下,单纯改写fputc还不行,还需要:
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
缺少这个定义,编译会通过,但在程序跑起来调用printf()会直接死机,可能的原因是程序中有操作或定义过FILE指向,printf无法接受一个指向FILE的正确指针对象。修改后,应用中没有加#pragma import(__use_no_semihosting)也可以跑起来。
在STM32中,初始化TX输出模式:
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- STM32 uart
- STM32->UART
- STM32 UART 初始化
- STM32 UART调试总结
- STM32 UART学习笔记
- STM32 UART编程
- stm32 UART串口
- 学习stm32--uart
- stm32 固件库之:uart
- stm32 uart打印
- STM32 --UART串口通信
- STM32 UART的使用过程
- STM32系统时钟 CAN UART
- STM32--UART异步通信学习
- stm32 uart清除中断时机
- stm32的UART串口通信
- STM32开发板入门教程 - 串口通讯 UART
- STM32+DMA+UART+ADC+内部温度传感器
- jackson-dataformat-xml XXE漏洞(CVE-2016-3720)
- 用c代码实现简单的出栈和压栈
- [转]深度学习中的正则化
- 浅析c#中登录窗体和欢迎窗体关闭的问题
- 浅谈GC垃圾回收器
- STM32->UART
- C++关键字final与override
- 霍曼转移轨道仿真(平面内和平面外)
- 用链表实现杭电1276士兵队列训练问题
- 算法导论:堆排序
- opencv2.4.13+vs2013
- 39. OP-TEE中secure stroage------安全文件数据的打开过程(open)
- linux上安装免安装版MySQL5.7.18
- OGNL和Struts2中的值栈