一。串口2初始化
void uart_init(u32 bound)
{
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //串口2的时钟来自PCLK1
USART_DeInit(USART2); //复位串口2
//USART2_TX PA.2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA2
//USART2_RX PA.3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PA3
USART_InitStructure.USART_BaudRate = bound; //设置波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件 数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART2, &USART_InitStructure); //初始化串口2
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启串口接受中断
USART_Cmd(USART2, ENABLE); //使能串口2
}
二。printf函数设置
//////////////////////////////////////////////////////////////////
//加入以下代码,支持printf函数,而不需要选择use MicroLIB
#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
USART2->DR = (u8) ch;
return ch;
}
#endif
三。串口2的中断服务函数
void USART2_IRQHandler(void) //串口2中断服务程序
{
u8 Res;
#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
OSIntEnter();
#endif
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a 结尾)
{
Res =USART_ReceiveData(USART2); //读取接收到的数据
if((USART_RX_STA&0x8000)==0)//接收未完成
{
if(USART_RX_STA&0x4000)//接收到了0x0d
{
if(Res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x8000; //接收完成了
}
else //还没收到0X0D
{
if(Res==0x0d)USART_RX_STA|=0x4000;
else
{
USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
USART_RX_STA++;
if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接 收
}
}
}
}
上一篇:49. RTC实验讲解
下一篇:通过串口给STM32烧写程序
推荐阅读
史海拾趣
针对晶体二极管单相全波电阻负载整流电路,网友可能提出多个问题,以下是一些可能的问题及其详细回答:
1. 什么是晶体二极管单相全波电阻负载整流电路?
回答:晶体二极管单相全波电阻负载整流电路是一种将交流电(AC)转换为直流电(DC)的电路,它利用了晶体二极管的单向导电特性。这种电路通过四个二极管(通常构成桥式整流器)实现全波整流,即同时利用交流电的正负半周进行整流,从而提高整流效率。负载电阻则用于消耗整流后的直流电。
2. 该电路的工作原理是什么?
回答:晶体二极管单相全波电阻负载整流电路的工作原理基于二极管的单向导电性。在交流电的正半周,二极管D1和D3导通,D2和D4截止,电流通过D1、负载电阻和D3形成回路,负载上得到上正下负的电压。在交流电的负半周,情况相反,D2和D4导通,D1和D3截止,电流方向不变,同样通过负载电阻,从而在负载上持续得到方向不变的直流电压。
3. 为什么需要四个二极管而不是两个?
回答:使用四个二极管构成桥式整流器可以充分利用交流电的正负两个半周,实现全波整流。如果只使用两个二极管,则只能实现半波整流,即只利用交流电的一个半周进行整流,整流效率较低。桥式整流电路通过巧妙地连接四个二极管,使得在每个半周内都有电流通过负载,从而提高了整流效率。
4. 如何提高该电路的整流效率?
回答:提高晶体二极管单相全波电阻负载整流电路的整流效率可以从以下几个方面入手:
- 选择合适的变压器:根据整流电路的输入电压和输出电压要求,选择合适的变压器,以保证整流电路的稳定性和效率。
- 优化整流器设计:通过选择合适的二极管和优化整流器的布局,可以提高整流器的整流效率和稳定性。
- 增加滤波电路:在整流器的输出端增加滤波电路(如电容和电感),可以滤除整流后的脉动直流电中的交流成分,得到更加平滑的直流电,从而提高整流效率。
5. 该电路有哪些应用?
回答:晶体二极管单相全波电阻负载整流电路具有广泛的应用,包括但不限于以下几个方面:
- 电源适配器:将交流电转换为直流电,为各种电子设备提供稳定的电源。
- 充电器:用于为电池充电,将交流电转换为适合电池充电的直流电。
- 电源模块:作为电源模块的一部分,为各种电子设备提供稳定的直流电源。
- 工业控制:在工业控制领域,为各种控制设备提供稳定的直流电源。
6. 该电路是否存在局限性?
回答:尽管晶体二极管单相全波电阻负载整流电路具有许多优点,但也存在一些局限性。例如,整流后的直流电仍存在一定的脉动成分,需要通过滤波电路进一步处理;此外,整流过程中会产生一定的能量损失,包括二极管的正向导通压降和滤波电路中的能量损耗等。因此,在实际应用中需要根据具体需求选择合适的整流电路和滤波方案。
近年来,随着物联网和人工智能技术的快速发展,智能化物流成为了电子行业的新趋势。Bomar公司敏锐地捕捉到了这一市场机遇,开始将业务范围拓展至智能化物流领域。通过与深兰科技等公司的合作,Bomar公司成功推出了智能化物流、仓储装备以及清洁机器人等产品,并成功销往欧洲市场。这些产品的推出不仅提升了Bomar公司的市场竞争力,也为公司的未来发展开辟了新的增长点。
近年来,随着科技的快速发展和电子行业的变革,EREM公司也面临着巨大的挑战。为了应对这些变革,EREM积极调整战略方向,加大研发投入,推出了一系列符合市场需求的新产品。同时,EREM还注重人才培养和团队建设,打造了一支高效、专业的团队,为公司的发展提供了有力保障。
面对数字化转型的浪潮,DLG Hanbit公司积极拥抱变革。公司加大了对云计算、大数据、人工智能等技术的研发投入,推出了一系列智能电子产品和解决方案。同时,公司还加强了与互联网企业、电信运营商等合作伙伴的合作,共同打造智能生态圈。未来,DLG Hanbit公司将继续秉承创新、品质、环保的理念,致力于成为全球领先的半导体设计和制造企业。
在电子行业的初期,CANDD公司凭借其创始人对半导体技术的深入研究,成功开发出了一款具有划时代意义的芯片。这款芯片不仅性能卓越,而且成本远低于市场上的同类产品。凭借这一技术突破,CANDD公司迅速在行业内崭露头角,吸引了大量投资者的关注。随着产品销量的不断增长,公司逐渐扩大了生产规模,并在全球范围内建立了销售网络。
随着市场的不断发展,Corsair意识到只有不断创新才能在竞争中立于不败之地。因此,公司加大了对研发的投入,积极引进先进技术和设备,不断提升产品的性能和质量。在一次次的尝试和失败后,Corsair的研发团队终于突破了行业技术瓶颈,成功开发出了一款具有高性能、高稳定性的连接器产品。这一创新成果不仅赢得了客户的青睐,也为公司在行业中树立了良好的口碑。
摘 要:介绍了一种新颖的L波段低相噪、捷变频频率合成器。该方案所设计的频率合成器是一种可预置频率的合成器。在方案中,运用2个锁相环,选择其中一个作为工作环,另外一个作为预置环(即:一个环工作,同时另一环预置下一工作频点,锁相环锁定时间不影响 ...… 查看全部问答∨ |
|
本帖最后由 jameswangsynnex 于 2015-3-3 20:01 编辑 1、产品及 EMC问题描述 2、问题分析 根据频谱图可以看出既有窄带尖峰干扰又存在宽带电源干扰,根据定位测试和频谱分析,确定100M左右的宽带干扰为外购电源适配器产生,更换后干扰消除, ...… 查看全部问答∨ |
我在网上下了一个简单的C#控制GPIO的演示程序,Project type 选的是c#\\smart device\\win ce5.0,模板选的是device application,可是程序编译下来出错了,错误信息部分如下: Error 4 Th ...… 查看全部问答∨ |
我移植snapgear(内核2.4)到IXP425板上,但是发现设置IP和子网掩码后,Bcast就是不对,比如:ip为10.10.62.X,子网掩码不管设为什么,生成的Bcast始终为10.255.255.255;当ip设成130.10.10.X时,子网掩码不管设为什么, ...… 查看全部问答∨ |
小弟想学习usb 2.0 驱动开发,帮我推荐一个学习板吧,谢谢。 由于种种原因,分析了自己的发展方向,决定往驱动方面发展,各位高手能不能帮我推荐一个适合初学者的开发板? 需求:1.usb 2.0 的开发板,用于驱动开发 学习 2.写程序工具 (1)推荐一款编程 ...… 查看全部问答∨ |
我在看郑扣根翻译的操作系统,里面用二进制信号量来实现计数信号量这一节没看懂,哪位大侠给解释一下: 设s为计数信号量。二进制信号量S1,S2,INT 变量C。开始时:S1=0,S2=0,整数C的值设置为计数信号量S的初值。 计数信号量S的 ...… 查看全部问答∨ |