历史上的今天
返回首页

历史上的今天

今天是:2025年01月29日(星期三)

2019年01月29日 | STM32 UART串口驱动程序

2019-01-29 来源:eefocus

示例1.通过UART1进行数据发送

UART 1 的初始化


/**

* @brief  UART1  Initialise.

* @param  None.

* @retval None.

*/

void UART1_Init(void)

{

  GPIO_InitTypeDef GPIO_InitStructure;

  USART_InitTypeDef USART_InitStructure;

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //UART1 选择对应UART的RCC时钟

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //选择串口对应引脚的RCC时钟

  //UART1_TX   GPIOA_Pin_9

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIOC_Pin_9

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //

  GPIO_Init(GPIOA, &GPIO_InitStructure);        //

  //UART1_RX    GPIOA_Pin_10

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //GPIOA_Pin_10

  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  GPIO_Init(GPIOA, &GPIO_InitStructure);

  //UART1通讯参数配置

  USART_InitStructure.USART_BaudRate = 115200;            //通讯波特率

  USART_InitStructure.USART_WordLength = USART_WordLength_8b;  //8个数据位

  USART_InitStructure.USART_StopBits = USART_StopBits_1;    //1个停止位

  USART_InitStructure.USART_Parity = USART_Parity_No;                              

  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //

  USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;                  //

  USART_Init(USART1, &USART_InitStructure);

  USART_Cmd(USART1, ENABLE);

}



将数据0xBA通过UART1发送出


USART_SendData(USART1,0xBA); //Send Data 0xBA



----------

示例2.通过对UART1进行接收中断配置,收到外部数据后进入中断读取数据 

UART 1 的初始化 开启接收中断



/**


@brief UART1 Initialise.


@param None.


@retval None.


@brief Data transfer PC

*/

void UART1_Init(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //UART1

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //


//UART1_TX GPIOA_Pin_9

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIOC_Pin_9

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //

GPIO_Init(GPIOA, &GPIO_InitStructure); //


//UART1_RX GPIOA_Pin_10

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //GPIOA_Pin_10

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);


//UART1通讯参数配置

USART_InitStructure.USART_BaudRate = 115200; //通讯波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8个数据位

USART_InitStructure.USART_StopBits = USART_StopBits_1; //1个停止位

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx; //

USART_Init(USART1, &USART_InitStructure);


//Uart1 NVIC 中断配置

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //数据接收中断使能

NVIC_Init(&NVIC_InitStructure);


USART_Cmd(USART1, ENABLE);

}


中断入口函数,变量rxdat用于存放接收到的1个字节数据


void USART1_IRQHandler(void)

{

  unsigned char  rxdat ;

  if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)

  {

    USART_ClearITPendingBit(USART1, USART_IT_RXNE); //Clear flag

    rxdat = USART_ReceiveData(USART1);

  }

}


推荐阅读

史海拾趣

CalRamic Technologies Llc公司的发展小趣事

随着全球环保意识的提升,CalRamic Technologies也积极响应,开始在生产过程中引入环保材料和工艺。公司不仅优化了生产流程,减少了废弃物和污染物的排放,还加大了对可再生能源的使用。这些举措不仅提升了公司的社会责任形象,也为其赢得了更多客户的青睐。同时,公司还开展了一系列环保宣传活动,倡导员工和客户共同参与环保行动,为可持续发展贡献力量。

Comtronic Gmbh-Verbindungstechnik公司的发展小趣事

为了保证产品质量的稳定性和可靠性,CalRamic Technologies在公司成立不久后,就开始着手建立严格的质量管理体系。他们引入了国际先进的质量管理理念和方法,对每一个生产环节进行严格把控。这一举措大大提高了产品的合格率和客户满意度,为公司的长期发展奠定了坚实基础。

创都(CAX)公司的发展小趣事

除了技术创新外,创都公司还以其精准的市场策略著称。在电子产品更新换代日益加快的背景下,公司市场部门深入分析了消费者的需求和市场趋势,成功预测了未来一段时间内的产品走向。基于这些分析,创都公司提前布局,推出了多款符合市场趋势的新产品。这些产品不仅满足了消费者的需求,还引领了市场潮流,为公司带来了丰厚的利润。此外,创都公司还积极开展品牌推广活动,通过线上线下多种渠道提升品牌知名度,进一步巩固了市场地位。

百蓉(ECE)公司的发展小趣事

面对智能制造的浪潮,百蓉公司积极拥抱变革。他们引进了先进的自动化设备,对生产线进行了全面升级,实现了从手工制造向智能制造的转变。这一转型不仅提高了生产效率,还大幅提升了产品质量和产品的一致性,使得百蓉的产品在市场上更具竞争力。

国盛科技(BOCHEN)公司的发展小趣事

国盛科技在技术创新方面取得了显著成果。截至目前,公司已累计取得8项发明专利、30项新型实用型专利,并成功转化了19项高新技术产品和知识产权成果。这些专利和成果的取得,不仅展示了国盛科技在电子元器件领域的研发实力,也为公司的持续发展提供了有力支撑。

Amulet Technologies公司的发展小趣事

国盛科技在技术创新方面取得了显著成果。截至目前,公司已累计取得8项发明专利、30项新型实用型专利,并成功转化了19项高新技术产品和知识产权成果。这些专利和成果的取得,不仅展示了国盛科技在电子元器件领域的研发实力,也为公司的持续发展提供了有力支撑。

问答坊 | AI 解惑

求个DSP BUILDER的安装包

哪位大侠有。麻烦发我邮箱landover08@126.com    感激不尽…

查看全部问答>

開關電源基本原理与設計介紹

幻灯片 2[size=178%][size=60%]n …

查看全部问答>

64 ML ROM CHECK ERROR!

万欣保护卡启动出现64 ML ROM CHECK ERROR!,请问各位前辈什么原因?如何解决?…

查看全部问答>

想学linux嵌入式开发,请各位前辈给出中肯的建议,谢谢各位

我想学嵌入式linux开发,有c和汇编基础,大学没能顺利毕业, 现在的想法是抱一个培训班,不知道培训的效果会不会比自学好很多, 没有大学学历,找工作会不会希望特别渺茫,   上海尚观培训怎么样呢 ?    然后请过来人推荐一个 ...…

查看全部问答>

今日插件-窗口的创建和刷新

我写了个今日插件,用CWnd::Create创建的窗体,回调函数用AfxWndProc 在wm5下好用,换到wm6下有问题,有些机器上Create失败,有些机器上虽然成功了 窗体被覆盖后收不到WM_PAINT消息,谁遇到过类似问题吗;后来也改用APIC创建窗体, 但是还要在上 ...…

查看全部问答>

两个程序相互切的时候怎么会有白屏?

两个程序相互切的时候怎么会有白屏? 程序1: 我是用 CreateWindowEx(WS_EX_TOPMOST, szWindowClass, szTitle, WS_POPUP | WS_WYWMENU,                        &nb ...…

查看全部问答>

硅光电池

我想过能硅光电池对火焰进行检测,,也就是想用硅光电池将火焰的光信号转换成电信号 可是我现在的问题是对硅光电池的选型?我应该选择什么型号的硅光电池》? 还有硅光电池怎么连接AD转换器呀???…

查看全部问答>

wince6.0 mp3解码问题。

我现在遇到两首mp3,在pc上看到属性为mp3, 立体声,16bit,44.1k 我在系统中加了mp3 cedec,MPEG-1 Layer 1 and 2 Audio Codec,但就是播放不了。 从驱动的private_WaveOpen中发现lpFormat->wFormatTag=80,正常应该是1即WAVE_FORMAT_PCM,只支持PC ...…

查看全部问答>

Protues软件该怎么用!

在Protues仿真软件画C51单片机时,如何把P0.0到P0.7这8个脚简化成一条公共线既A[0...7]这种.用什么图标来画!…

查看全部问答>

求助 UCOS移植到ARM9上的中断处理问题

我最近在学习将UC0S移植到S3C2410上,是ARM9,在网上下的别人的移植的代码,自己稍加修改,可以跑多个任务,我想,既然是操作系统移植到ARM板上,就可以管理外部硬件资源了,之前我在裸板上有个按键控制LED亮灭的程序,我想添加个任务,用UCOS来管 ...…

查看全部问答>