历史上的今天
今天是:2025年08月15日(星期五)
2018年08月15日 | STM32-串口程序
2018-08-15 来源:eefocus
学习各种硬件,串口是必不可少的也是首要学习的外设,因为有了串口之后,就可以和硬件进行简单的交互,也能更加方便的验证所写的程序的正确性。
STM32拥有多个USART,支持多种模式的配置,具体的可以参照STM32的相关手册进行学习
再来看一下USART的功能框图:
在使用任何一个外设功能之前,都要看看它所对应的功能框图,这样有助于理解功能的使用。
接下来看一下关于USART的相关寄存器和可操作的库函数。
最后还需要看一张关于GPIO的USART的引脚复用:
因为USART与外界沟通是用控制器的GPIO引脚的复用功能,所以在使用USART功能之前需要把GPIO配置成相应的输入输出模式。
同时如果需要开启中断,还要进行中断通道的使能,和优先级的分组设置。
#include "stm32f10x.h"
/**
* @brief 初始化GPIO,默认速度为GPIO_Speed_50MHz;
*
* @param GPIO分组
* @param GPIO引脚
* @param GPIO引脚模式
* @retval None
*/
void GPIO_init(GPIO_TypeDef * GPIOx,u16 GPIO_Pin,GPIOMode_TypeDef Mode)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Mode=Mode;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOx,&GPIO_InitStruct);
}
/**
* @brief 初始化USART
*
* @param 波特率,数据位数,停止位,发送接收模式
* @retval None
*/
void UART_init(int BaudRate,u16 WordLength,u16 StopBits,u16 Parity,u16 Mode)
{
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.USART_BaudRate=BaudRate;
USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
USART_InitStruct.USART_Mode=Mode;
USART_InitStruct.USART_Parity=Parity;
USART_InitStruct.USART_StopBits=StopBits;
USART_InitStruct.USART_WordLength=WordLength;
USART_Init(USART1,&USART_InitStruct);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
USART_Cmd(USART1,ENABLE);
}
/**
* @brief 初始化中断向量
*
* @param 中断通道,抢占优先级,相应优先级,使能/失能
* @retval None
*/
void NVIC_init(u8 NVIC_IRQChannel,u8 NVIC_IRQChannelPreemptionPriority,u8 NVIC_IRQChannelSubPriority,u8 NVIC_IRQChannelCmd)
{
NVIC_InitTypeDef NVIC_InitStrue;
NVIC_InitStrue.NVIC_IRQChannel=NVIC_IRQChannel;
NVIC_InitStrue.NVIC_IRQChannelCmd=NVIC_IRQChannelCmd;
NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=NVIC_IRQChannelPreemptionPriority;
NVIC_InitStrue.NVIC_IRQChannelSubPriority=NVIC_IRQChannelSubPriority;
NVIC_Init(&NVIC_InitStrue);
}
int main()
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
GPIO_init(GPIOA,GPIO_Pin_9,GPIO_Mode_AF_PP);
GPIO_init(GPIOA,GPIO_Pin_10,GPIO_Mode_IN_FLOATING);
NVIC_init(USART1_IRQn,1,1,ENABLE);
GPIO_init(GPIOA,GPIO_Pin_0,GPIO_Mode_Out_PP);
GPIO_ResetBits(GPIOA,GPIO_Pin_0);
UART_init(115200,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx|USART_Mode_Rx);
while(1);
}
void USART1_IRQHandler(void)
{
u8 res;
if(USART_GetITStatus(USART1,USART_IT_RXNE))
{
res=USART_ReceiveData(USART1);
USART_SendData(USART1,res);
}
}
最后的那个函数是串口接收中断的响应函数,主要串口接收到了数据,响应的标志位置1之后就进入到中断函数中,前提是要使能串口接收中断。
以上程序是是实现了串口的接收和发送,发送接收进来的数据。
史海拾趣
|
无线多媒体通信和计算市场的迅猛发展既对电源提出了越来越高的要求,同时也为电源以及电源管理IC市场的发展注入了一股强劲的增长动力。近几年来电源管理IC的市场规模和潜力一直处在急速膨胀之中。据美国风险发展公司(VDC)估计,2004年电源管理IC的 ...… 查看全部问答> |
|
功率MOSFET以其导通电阻低和负载电流大的突出优点,已经成为高频开关电源系统(switch-mode POWER supplies,SMPS)整流组件的最佳选择,专用MOSFET驱动器的出现又为优化SMPS控制器带来了契机。那些与SMPS控制器集成在一起的驱动器只适用于电路简单 ...… 查看全部问答> |
|
请问声卡设置中的均衡器设置,环境设置, DSP模式设置是怎么实现的? Windows, VC2008 现在的声卡安装了驱动后, 都会附带一个声卡设置程序。 这个声卡设置程序里,有各种音量设置,这个可以通过混音器来实现。 但是,它还有均衡器设置,环境设置, DSP模式设置,这些又是怎么实现的? 我知道播放器可以设置均衡器, ...… 查看全部问答> |
|
推荐一个不错的嵌入式驱动开发入门的免费视频:http://www.56.com/u15/v_NDE1MjU1MzI.html 好的话顶一个 更多资料了解顶嵌站点… 查看全部问答> |
|
【急】xpe无法启动,提示“lsass.exe 当试图更新密码时本返回状态表示所提供的当前密码不正确” 一台升腾的8600,所用系统为Windows XP Embedded,就用了C盘一个分区,加过一层保护。那天装某个软件 ,安装驱动时提示更新几个系统文件,没怎么注意就更新掉了。结果重启后就进不去系统了, 在XP启动画面滚动 条之后用户名密码登录提示框出来前 ...… 查看全部问答> |
|
工程已经编译通过,现在想跟踪Media Player的代码. Media Player的源代码在WINCE500\\PUBLIC\\DIRECTX\\SDK\\SAMPLES\\WMP目录下. 于是在PB中的WINCE500\\PUBLIC\\DIRECTX\\SDK\\SAMPLES\\WMP目录下选择Build. 但是Build之后只是生成了ceplayer.l ...… 查看全部问答> |
|
十一届全国人大四次会议新闻中心3月8日上午9时在梅地亚中心多功能厅举行记者会,人力资源和社会保障部部长尹蔚民、副部长胡晓义就“就业和社会保障体系建设”的相关问题回答中外记者的提问。[尹蔚民]第二个问题,关于你讲到的大学毕业生就业 ...… 查看全部问答> |




