历史上的今天
今天是:2025年04月23日(星期三)
2019年04月23日 | STM32学习笔记-配置串口,printf重定向
2019-04-23 来源:eefocus
串口的配置(以stm32f103c8t6串口1为例)
USART_InitTypeDef chuanko;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
chuanko.USART_BaudRate=9600;
chuanko.USART_WordLength=USART_WordLength_8b;
chuanko.USART_StopBits=USART_StopBits_1;
chuanko.USART_Parity=USART_Parity_No;
chuanko.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
chuanko.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
USART_Init(USART1,&chuanko);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
USART_ClearFlag(USART1,USART_FLAG_TC);
USART_InitTypeDef串口结构体变量类型
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);打开apb2总线上的串口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);打开apb2总线上的复用时钟
chuanko.USART_BaudRate=9600;串口波特率
波特率:模拟线路信号的速率,以波形每秒的振荡数来衡量。如果数据不压缩,波特率等于每秒钟传输的数据位数,如果数据进行了压缩,那么每秒钟传输的数据位数通常大于调制速率,使得交换使用波特和比特/秒偶尔会产生错误。
chuanko.USART_WordLength=USART_WordLength_8b;数据位数
chuanko.USART_StopBits=USART_StopBits_1;停止位数
chuanko.USART_Parity=USART_Parity_No;有无奇偶校验
chuanko.USART_HardwareFlowControl=USART_HardwareFlowControl_None;硬件流控制
chuanko.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;串口模式 发送 接收
USART_Init(USART1,&chuanko);传入结构体变量地址,配置串口
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);打开串口中断
USART_Cmd(USART1,ENABLE);使能串口1
USART_ClearFlag(USART1,USART_FLAG_TC);清空标志位
io初始化
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
......;
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
}
}
编写中断服务函数,每收到1字节数据进入一次中断服务函数
USART_ReceiveData(USART1);返回收到的数据
USART_SendData(USART1,数据);发送数据
printf重定向
printf是c语言标准输入输出库中的函数,只需修改它的输出到串口即可
包含stdio.h重载下面这个函数完成重定义
int fputc(int ch,FILE *f)
{
USART_SendData(USART1,(u8)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return ch;
}
史海拾趣
|
一﹑前言 关于电磁兼容的要求﹐目前世界上大多的先进国家﹐都已经有管制的法规并有相关的符合要求的单位﹐若产品无法符合要求规定﹐往往无法销售到该地区的市场﹐因此多数的电子产品﹐在销售前都必须经过电磁兼容的测试﹐ ...… 查看全部问答> |
|
PSoC片上系统与单片机、ARM的区别 到目前为止,有三种技术对电子工程师设计电子产品的模式产生了重大而又深远的影响,它们是:可编程微控制器(MCU),可编程逻辑阵列和可编程模拟阵列。与采用多个分立元件及单一功能的模拟与数字集成电路组成的 ...… 查看全部问答> |
|
我现在在操作flash芯片,以我的想法,应该每次和flash芯片交互的时候然后将CE拉低有效,完成后拉高,下次用的时候重复这样做.但是,我想知道在对flash芯片初始化的时候就直接对其ce管脚拉低,然后整个程序跑的过程中一直是地电 ...… 查看全部问答> |
|
如题! 想请朋友更详细的告之,对于一个完全的新手,学习java的嵌入式开发,需要学好哪些课程?需要了解哪些? 之前搜索过,但都没有给出详解,还希望eeworld里朋友们,多给点建议。… 查看全部问答> |
|
如题: tchar_t id3[128]; int i = get_current_music(); g_pp->CommentByName(g_pp,i,PlayerComment(COMMENT_TITLE),id3,TSIZEOF(id3)); g_pp->CommentByName(g_pp,i,PlayerComment(COMMENT_ARTIST),id3,TSIZEOF(id3)); 复制代码… 查看全部问答> |
|
基于USB的无线网卡,插上无线网卡是桌面的右下角会出现无线网卡的图标,这是正常的. 由于我的USB无线网卡支持selective suspend,也就是说,如果无线网卡在一定的时间 内(10s)如果没有和AP或者其他网卡连接上,则无线网卡进入睡眠的状态.睡眠的状态和 ...… 查看全部问答> |




