历史上的今天
返回首页

历史上的今天

今天是:2025年04月19日(星期六)

2021年04月19日 | STM32 无中断串口代码

2021-04-19 来源:eefocus

下面的代码是我使用STM32库编写的串口输出和读取的代码。

1、串口初始化函数:void USART_Ini(USART_TypeDef* USARTx,u16 buad)


2、串口中断开启和关闭:USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)


3、串口接收:u16 Getch(USART_TypeDef* USARTx)


4、串口单个字符输出:void Putch(USART_TypeDef* USARTx,u16 ch)


5、串口输出字符串:void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)


#include "stm32f10x_lib.h"


u16 RecDateBuffer[100];

u16 RecLen;

u8 SendDateBuffer[100];


/*******************************************************************************

* Function Name : Uart_Ini

* Description : 串口初始化

* Input :

* Output : None

* Return :

*******************************************************************************/

void USART_Ini(USART_TypeDef* USARTx,u16 buad)

{

USART_InitTypeDef USART_InitStructure;

USART_ClockInitTypeDef USART_ClockIni;

GPIO_InitTypeDef GPIO_InitStructure;


/* Configure USART1 Tx (PA.09) as alternate function push-pull */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);


/* Configure USART1 Rx (PA.10) as input floating */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOD, &GPIO_InitStructure);


USART_InitStructure.USART_BaudRate = 9600; //串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b; //串口数据长度

USART_InitStructure.USART_StopBits = USART_StopBits_1; //串口停止位

USART_InitStructure.USART_Parity = USART_Parity_No; //串口奇偶效验位

USART_InitStructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx; //串口模式,开始起发送和接收

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //串口硬件流


USART_ClockIni.USART_Clock = USART_Clock_Disable;

USART_ClockIni.USART_CPOL = USART_CPOL_Low;

USART_ClockIni.USART_CPHA = USART_CPHA_2Edge;

USART_ClockIni.USART_LastBit = USART_LastBit_Disable;


USART_Init(USARTx,&USART_InitStructure);

USART_ClockInit(USARTx,&USART_ClockIni);

/* Enable USART1 */

USART_Cmd(USARTx, ENABLE); //开启串口X

}

/*******************************************************************************

* Function Name : Getch

* Description : 串口中断开启或关闭

* Input : USARTx:x=串口号

NewState: ENABLE开启中断,DISABLE关闭中断

* Output : None

* Return :

*******************************************************************************/

void USART_IT(USART_TypeDef* USARTx,FunctionalState NewState)

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);


if(NewState==ENABLE)

{

USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,ENABLE);

}

else

{

USART_ITConfig(USARTx,USART_IT_RXNE | USART_IT_TXE,DISABLE);

}

}

/*******************************************************************************

* Function Name : Getch

* Description : 串口接收字符

* Input : USARTx:x=串口号

* Output : None

* Return :

*******************************************************************************/

u16 Getch(USART_TypeDef* USARTx)

{

u16 ch;

if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)

{

ch=USART_ReceiveData(USARTx);

//return(ch);

}

return(ch);

}

/*******************************************************************************

* Function Name : GetStr

* Description : 接收字符串

* Input : USARTx:x=串口号

buffer:接收字符串数组

* Output : None

* Return :

*******************************************************************************/

void GetStr(USART_TypeDef* USARTx)

{

//u16 i;

while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)

{

if(USART_GetFlagStatus(USARTx,USART_FLAG_ORE)==RESET)

{

if(RecLen<100)

{

RecDateBuffer[RecLen]=USART_ReceiveData(USARTx);

RecLen++;

}

}

}


}

/*******************************************************************************

* Function Name : Putch

* Description : 串口输出一个字符

* Input : USARTx:x=串口号

ch:串口输出的字符

* Output : None

* Return :

*******************************************************************************/

void Putch(USART_TypeDef* USARTx,u16 ch)

{

if(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==SET)

{

USART_SendData(USARTx,ch);

}

}

/*******************************************************************************

* Function Name : PutStr

* Description : 串口输出字符串

* Input : USARTx:x=串口号

SendBuf:串口输出字符串

Length:输出长度

* Output : None

* Return :

*******************************************************************************/

void PutStr(USART_TypeDef* USARTx,u16 *SendBuf,u16 Length)

{

u16 i;


for(i=0;i

{

Putch(USARTx,SendBuf[i]);

}

}


推荐阅读

史海拾趣

Anixter Inc公司的发展小趣事

Anixter Inc 是一家全球性的供应链解决方案提供商,以下是该公司发展的相关故事:

  1. 公司成立与初期发展:Anixter Inc 成立于 1957 年,总部位于美国伊利诺伊州格伦维尔回。最初,公司主要从事电线电缆的销售和分销。随着时间的推移,Anixter 不断扩大业务范围,逐步涉足网络设备、安全解决方案、电子元器件等领域。

  2. 业务拓展与国际化:随着市场需求的变化和全球化的趋势,Anixter 不断拓展业务,并加速国际化进程。公司在全球范围内建立了广泛的分销网络和供应链体系,在北美、欧洲、亚洲和拉丁美洲等地区设立了办事处、仓库和物流中心,以更好地满足客户的需求。

  3. 技术创新与解决方案提供:Anixter 不断注重技术创新和解决方案提供,与各种供应商合作,推出了多种先进的产品和服务。公司致力于为客户提供全方位的供应链解决方案,包括设计、采购、仓储、配送和技术支持等,帮助客户提高效率、降低成本并增强竞争力。

  4. 收购与合并:为了加速业务发展和扩大市场份额,Anixter 进行了一系列收购和合并活动。通过收购具有特定技术或地区优势的公司,Anixter 不仅增强了自身的竞争实力,还拓展了业务领域和市场覆盖范围。

  5. 可持续发展与未来展望:Anixter 积极响应可持续发展的呼声,致力于推动环保和社会责任的实践。公司在供应链管理、能源管理和环境保护等方面持续改进,致力于减少碳排放、资源浪费和环境污染。未来,Anixter 将继续秉承技术创新和客户导向的理念,不断适应市场变化和挑战,保持行业领先地位,并为客户和股东创造持续增长的价值。

BOOKHAM公司的发展小趣事

BOOKHAM公司自创立之初,就专注于光学元件的研发和生产。随着电子行业的快速发展,公司不断投入研发资源,终于在一次技术突破中,成功开发出一款高性能的光学元件。这款元件凭借其卓越的性能和稳定的品质,迅速获得了市场的认可,BOOKHAM公司也因此名声大噪,逐渐在电子行业中崭露头角。

Compact公司的发展小趣事

在快速发展的过程中,Compact公司始终注重品牌建设和文化传承。公司通过不断提升产品质量和服务水平,树立了良好的品牌形象。同时,公司还注重培养员工的归属感和忠诚度,形成了独特的企业文化。这种文化传承不仅为公司的发展提供了强大的精神动力,还使公司在激烈的市场竞争中保持了独特的竞争力。

Beck IPC GmbH公司的发展小趣事

Beck IPC始终坚持以研发和创新为核心驱动力。公司每年投入大量资金用于研发新技术和产品,并建立了完善的研发团队和体系。通过不断的技术创新和产品升级,Beck IPC始终保持着在嵌入式通讯和工业物联网领域的领先地位。同时,公司还积极参与国际标准制定和行业交流活动,为推动行业发展贡献自己的力量。

aconno公司的发展小趣事

aconno公司在电子行业的崛起,始于其坚持创新驱动的发展策略。早年公司便投入大量资源进行技术研发,尤其是在物联网和嵌入式系统领域。通过不断推出具有创新性和实用性的产品,aconno逐渐在市场中建立了良好的口碑。例如,其自主研发的一款智能传感器,因其高灵敏度和稳定性受到了市场的广泛认可。随着技术的不断积累和创新,aconno逐渐在行业中崭露头角。

广州盛炬(GZSJ)公司的发展小趣事

aconno公司在电子行业的崛起,始于其坚持创新驱动的发展策略。早年公司便投入大量资源进行技术研发,尤其是在物联网和嵌入式系统领域。通过不断推出具有创新性和实用性的产品,aconno逐渐在市场中建立了良好的口碑。例如,其自主研发的一款智能传感器,因其高灵敏度和稳定性受到了市场的广泛认可。随着技术的不断积累和创新,aconno逐渐在行业中崭露头角。

问答坊 | AI 解惑

变压器呼吸器引起的异常

 变压器作为变电站的主设备,运行的安全直接影响供电的可靠性,在变压器预防性试验中,发现主绝缘异常,对造成异常的原因进行分析和及时处理,防止了一起设备事故的发生,并提出了运行维护中应注意的问题。 关键词:变压器;呼吸器;   绝缘 ...…

查看全部问答>

器件搜索

本帖最后由 paulhyde 于 2014-9-15 09:17 编辑 器件搜索  …

查看全部问答>

请教高手电路图中的难点

D13,D41,D42三个二极管再电路中是什么用处? 如果LM324的1脚输出增加,那么D13,D41,D42三个二极管输出全部拉低,这对电路整体有什么影响呢? [ 本帖最后由 simonprince 于 2009-9-10 08:46 编辑 ]…

查看全部问答>

s3c2440

刚做了新板子,CPU和nandflash用JTAG都可以检测出来,但是写了亮灯程序就是跑不起来 我检测nandflash里面的数据已经烧写正确。 请教高手,会是什么问题引起?…

查看全部问答>

VHDL计数器问题

各位帮忙看下我这个程序 哪有问题? 还有我想在加个输入端口,挡给这个端口1个高电平时计数清零,在给他一个低电平时候 在重新计数 library ieee; use ieee.std_logic_1164.all; entity aa is port (clk,hold : in std_logic;   &nbs ...…

查看全部问答>

单个数码管verilog程序

module  seg1(clk,a,seg);input    clk;output     a;output   [7:0]  seg; reg      [7:0]  seg;reg      a;    ...…

查看全部问答>

求助:f2812如何将片内FLASH中的程序加载到片内RAM中运行?

由于程序在片内flash中的运行速度较慢,希望能将片内flash中的程序全部加载到片内ram中运行,请问有什么好办法? 我的邮箱:gziyong2004@126.com,希望大家有空多沟通交流!…

查看全部问答>

智能小车

本帖最后由 dontium 于 2015-1-23 13:24 编辑 智能小车 …

查看全部问答>