最近使用STM32进行了一个低功耗应用设计,做一个小总结:
1、SLEEP 模式:很容易实现,可以由中断唤醒,但省电较少。这时候要配合时钟的关闭来节电:不需要用到的外设关闭时钟,要用到时才打开。例如USART:要发送数据前,把USART的时钟使能,数据包发送完成后,立即关闭时钟。
2、STOP 模式:需要外部中断唤醒。RTC报警唤醒给该模式带来了更加灵活的应用。但应用中有一个问题需要注意:在ADC数据采样的应用场合。如果使用STOP模式,假设采样率为200HZ,5毫秒唤醒一次启动ADC 采样,通过测试STOP唤醒的周期并不是很固定(可能是唤醒后需要恢复时钟设置,唤醒后自动使用内部的HSI时钟做为系统时钟),造成采样周期不是很固定,对滤波不利,例如工频陷波。
以上一点总结,希望对大家有用。
1、STM32进入STOP模式后,当串口接收到数据时,需要唤醒STM32。
进入STOP模式前、退出STOP模式后,需要怎么进行设置?
答案:
进入stop模式前,将串口的RxD设置为外部中断输入。
在stop模式时,RxD端口接收到数据时(有上升沿或下降沿时),产生中断。
中断服务程序中,恢复MCU的时钟,再将RxD端口当串口接收端口使用即可
关于STM32串口空闲中断IDEL的问题 1.空闲中断是接受数据后出现一个byte 的高电平(空闲)状态,就会触发空闲 中断.并不是空闲就会一直中断,准确的说应该是上升沿(停止位)后一个 byte,如果一直是低电平是不会触发空闲中断的(会触发break 中断)。 2.关于第二点有要铺垫的三个情况,datasheet 中”当一空闲帧被检测到时,其处 理步骤和接收到普通数据帧一样,但如果IDLEIE 位被设置将产生一个中断”“空 闲符号被视为完全由'1'组成的一个完整的数据帧,后面跟着包含了数 据的下一帧的开始位'1'的位数也包括了停止位的位数”空闲符号的 配图后面跟这一个低电平.有人理解为只有收到下一个数据的起始位才会触发中 断,这样理解是不对的,应该是数据后有空闲了一帧就会触发. 3.清中断的方式感觉奇怪,使用函数USART_ClearITPendingBit( USART1, USART_IT_IDLE )清除不了中断的.我用的是3.5 的库,查看函数说明,里面的 @param 参数并没有IDLE,后面的@note 中,这样说:”PE(Parity error),FE(Framing error),NE(Noise error),ORE(OverRun error) and IDLE(Idle line detected) pending bits are cleared by software sequence: a read operation to USART_SR register (USART_GetITStatus()) followed by a read operation to USART_DR register (USART_ReceiveData()).”我是通过语句”USART1->DR;”来清除IDLE 中断的. 现在有很多数据处理都要用到不定长数据,而单片机串口的RXNE 中断一次 只能接收一个字节的数据,没有缓冲区,无法接收一帧多个数据,现提供两种 利用串口IDLE 空闲中断的方式接收一帧数据,方法如下: 方法1:实现思路:采用STM32F103 的串口1,并配置成空闲中断IDLE 模 式且使能DMA 接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成 之后,当外部给单片机发送数据的时候,假设这帧数据长度是200 个字节,那
51单片机串口通信及波特率设置 MCS-51单片机具有一个全双工的串行通信接口,能同时进行发送和接收。它可以作为UART(通用异步接收和发送器)使用,也可以作为同步的移位寄存器使用。 1. 数据缓冲寄存器SBUF SBUF是可以直接寻址的专用寄存器。物理上,它对应着两个寄存器,即一个发送寄存器一个接收寄存器,CPU写SBUF就是修改发送寄存器;读SBUF就是读接收寄存器。接收器是双缓冲的,以避免在接收下一帧数据之前,CPU未能及时的响应接收器的中断,没有把上一帧的数据读走而产生两帧数据重叠的问题。对于发送器,为了保持最大的传输速率,一般不需要双缓冲,因为发送时CPU是主动的,不会产生重叠问题。 2. 状态控制寄存器SCON SCON是一个逐位定义的8位寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态,SCON即可以字节寻址也可以位寻址,字节地址98H,地址位为98H~9FH。它的各个位定义如下: MSB LSB SM0 SM1 SM2 REN TB8 RB8 TI RI SM0和SM1是串口的工作方式选择位,2个选择位对应4种工作方式,如下表,其中Fosc是振荡器的频率。 SM0 SM1 工作方式功能波特率 0 0 0 8位同步移位寄存器Fosc/12 0 1 1 10位UART 可变 1 0 2 11位UART Fosc/64或Fosc/32 1 1 3 11位UART 可变 SM2在工作方式2和3中是多机通信的使能位。在工作方式0中,SM2必须为0。在工作方式1中,若SM2=1且没有接收到有效的停止位,则接收中断标志位RI不会被激活。在工作方式2和3中若SM2=1且接收到的第9位数据(RB8)为0,则接收中断标志RB8不会被激活,若接收到的第9位数据(RB8)为1,则RI置位。此功能可用于多处理机通信。 REN为允许串行接收位,由软件置位或清除。置位时允许串行接收,清除时禁止串行接收。 TB8是工作方式2和3要发送的第9位数据。在许多通信协议中该位是奇偶位,可以按需要由软件置位或清除。在多处理机通信中,该位用于表示是地址帧还是数据帧。 RB8是工作方式2和3中接收到的第9位数据(例如是奇偶位或者地址/数据标识位),在工作方式1中若SM2=0,则RB8是已接收的停止位。在工作方式0中RB8不使用。 TI 为发送中断标志位,由硬件置位,软件清除。工作方式0中在发送第8位末尾由硬件置位;在其他工作方式时,在发送停止位开始时由硬件置位。TI=1时,申请中断。CPU 响应中断后,发送下一帧数据。在任何工作方式中都必须由软件清除TI。 RI为接收中断标志位,由硬件置位,软件清除。工作方式0中在接收第8位末尾由硬件置位;在其他工作方式时,在接收停止位的中间由硬件置位。RI=1时,申请中断,要求CPU取走数据。但在工作方式1中,SM2=1且未接收到有效的停止位时,不会对RI置位。在任何工作方式中都必须由软件清除RI。 系统复位时,SCON的所有位都被清除。 控制寄存器PCON也是一个逐位定义的8位寄存器,目前仅仅有几位有定义,如下所示:MSB LSB
TMS320F28335外部中断总结 作者:Free 文章来源:Free 点击数:93 更新时间:2010-8-26 在这里我们要十分清楚DSP的中断系统。C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13 和14。这样还有12个中断都直接连接到外设中断扩展模块PIE上。说的简单一点就是PIE 通过12根线与28335核的12个中断线相连。而PIE的另外 一侧有12*8根线分别连接到外设,如AD、SPI、EXINT等等。这样PIE共管理12*8=96个外部中断。这12组大中断由28335核的中断寄存器IER来控 制,即IER确定每个中断到底属于哪一组大中断(如IER |= M_INT12;说明我们要用第12组的中断,但是第12组里面的什么中断CPU并不知道需 要再由PIEIER确定)。接下来再由PIE模块中的寄存器PIEIER中的低8确定该中断是这一组的第几个中断,这些配置都要告诉CPU(我们不难想 象到PIEIER共有12总即从PIEIER1-PIEIER12)。另外,PIE模块还有中断标志寄存器PIEIFR,同样它的低8位是来自外部中断的8个标志位,同 样CPU的IFR寄存器是中断组的标志寄存器。由此看来,CPU的所有中断寄存器控制12组的中断,PIE的所有中断寄存器控制每组内8个的中断。 除此之外,我们用到哪一个外部中断,相应的还有外部中断的寄存器,需要注意的就是外部中断的标志要自己通过软件来清零。而PIE和CPU的 中断标志寄存器由硬件来清零。 EALLOW; // This is needed to write to EALLOW protected registers PieVectTable.XINT2 = &ISRExint; //告诉中断入口地址 EDIS; // This is needed to disable write to EALLOW protected registers PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block使能PIE PieCtrlRegs.PIEIER1.bit.INTx5= 1; //使能第一组中的中断5 IER |= M_INT1; // Enable CPU 第一组中断
MSP430波特率的计算 给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接近N。 如果N等于或大于16,可以设置UCOS16选择oversampling baud Rate模式注:Round():指四舍五入。 Low-Frequency Baud Rate Mode Setting 在low-frequency mode,整数部分的因子可以由预分频实现: UCBRx = INT(N) 小数部分的因子可以用下列标称公式通过调制器实现: UCBRSx = round( ( N –INT(N) ) × 8 ) 增加或减少UCBRSx一个计数设置,对于任何给定的位可能得到一个较低的最高比特误码率。如果确定是这样的情况UCBRSx设置的每一位必须执行一个精确的错误计算。 例1:1048576Hz频率下驱动以115200波特率异步通讯 ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz。 N = fBRCLK/Baudrate = 1048576/115200 = ~9.10 UCBRx = INT(N) = INT(9.10) = 9 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 9.10 –9) × 8 )=round(0.8 )=1 UCA0CTL1 |= UCSSEL_2;// 选SMCLK为时钟 UCAxBR0 = 9; UCAxBR1 = 0; UCAxMCTL = 0x02;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx 为寄存器UCAxMCTL的1-3位,所以写入0x02(00000010) 例2:32768Hz频率下驱动以2400波特率异步通ACLK = REFO = ~32768Hz, MCLK = SMCLK = DCO ~1.045MHz N = fBRCLK/Baudrate = 32768/2400 = ~13.65 UCBRx = INT(N) = INT(13.65) = 13 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 13.65 –13) × 8 )=round(5.2)=5 UCA0CTL1 |= UCSSEL_1; // 选ACLK为时钟 UCAxBR0 = 13;UCAxBR1 = 0 ; UCAxMCTL = 0x0A;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx为寄存器UCAxMCTL的1-3位,所以写入0x0A(00001010) Oversampling Baud Rate Mode Setting 在oversampling mode 与分频器设置如下:
STM32学习之串口USART STM32 的串口是相当丰富的。最多可提供5路串口,有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIR ENDEC 规范(仅串口3 支持)、具有DMA 等。串口最基本的设置,就是波特率的设置。STM32 的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应IO口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了。 1、串口时钟使能。串口作为STM32 的一个外设,其时钟由外设始终使能寄存器控制,这里我们使用的串口1是在APB2ENR 寄存器的第14 位。除了串口1 的时钟使能在APB2ENR寄存器,其他串口的时钟使能位都在APB1ENR。 1、串口的作用:用在STM32板子和PC机通信的。我们调试的时候,无法知道是否正确,就可以用STM32的cpu,给串口输出一些信息给PC,我们通过屏幕(实际上是终端串口软件),可以看到这些信息,从而知道当前程序的错误可能出现的位置。当然,也可以在PC的键盘敲打命令,让串口帮传递给STM32板子,来执行这些命令。 2、串口的工作模式一般有两种方式:查询和中断 (1)查询:串口程序不断地循环查询,看看当前有没有数据要它传,如果有,就帮助传送(可以从PC到STM32板子,也可以从STM32 板子到PC)。 (2)中断:平时串口只要打开中断即可。如果发现有一个中断来,则意味着要它帮助传输数据——它就马上进行数据的传送。同样,可以从PC到STM32板子,也可以从STM32板子到PC 。 步骤一从硬件开始学习。大家先打开芯达STM32开发板附带的原理图。找到串口部分。笔者把它截图如下。我们发现,串口模块的电路是这样的:STM32的CPU引脚,通过两个PA端口的引脚PA10和PA9(此两个引脚复用USART),连接到一个SP3232芯片,或者MAX232芯片。然后再连接到DB9串口座上。由于232芯片可以允许走两路信号,因此,我们扩展了一个串口COM2,请注意,如无特别说明,我们都将使用COM1。
本例程通过PC机的串口调试助手将数据发送至STM32,接收数据后将所接收的数据又发送至PC机,具体下面详谈。。。 实例一: void USART1_IRQHandler(u8 GetData) { u8 BackData; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志. GetData = UART1_GetByte(BackData); //也行GetData=USART1->DR; USART1_SendByte(GetData); //发送数据 GPIO_SetBits(GPIOE, GPIO_Pin_8 ); //LED闪烁,接收成功发送完成 delay(1000); GPIO_ResetBits(GPIOE, GPIO_Pin_8 ); } } 这是最基本的,将数据接收完成后又发送出去,接收和发送在中断函数里执行,main函数里无其他要处理的。 优点:简单,适合很少量数据传输。 缺点:无缓存区,并且对数据的正确性没有判断,数据量稍大可能导致数据丢失。 实例二: void USART2_IRQHandler() { if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) //中断产生 { USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除中断标志 Uart2_Buffer[Uart2_Rx_Num] = USART_ReceiveData(USART2); Uart2_Rx_Num++; } if((Uart2_Buffer[0] == 0x5A)&&(Uart2_Buffer[Uart2_Rx_Num-1] == 0xA5)) //判断最后接收的数据是否为设定值,确定数据正确性 Uart2_Sta=1; if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) //溢出 { USART_ClearFlag(USART2,USART_FLAG_ORE); //读SR USART_ReceiveData(USART2); //读DR } } if( Uart2_Sta ) { for(Uart2_Tx_Num=0;Uart2_Tx_Num < Uart2_Rx_Num;Uart2_Tx_Num++)
51单片机波特率计算的公式和方法 51单片机芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。它的各个位的具体定义如下: SM0SM1SM2REN TB8RB8TI RI SM0、SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。串行口工作模式设置。 波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。这里所指的波特率,如标准9600不是每秒种可以传送9600个字节,而是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是9600÷10=960字节。 51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。 模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率,就是说定时器1每溢出一次,串口发送一次数据。那么我们怎么去计算这两个模式的波特率设置时相关的寄存器的值呢?可以用以下的公式去计算。
上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。在这个定时模式2下定时器1溢出速率的计算公式如下: 溢出速率=(计数速率)/(256-TH1初值) 溢出速率=fosc/[12*(256-TH1初值)] 上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯片上,那么51的计数速率就为1M。通常用11.0592M 晶体是为了得到标准的无误差的波特率,那么为何呢?计算一下就知道了。如我们要得到9600的波特率,晶振为11.0592M和12M,定时器1为模式2,SMOD 设为1,分别看看那所要求的TH1为何值。代入公式: 11.0592M 9600=(2÷32)×((11.0592M/12)/(256-TH1)) TH1=250
STM32 无中断串口代码2010-05-14 16:09 串口,是我们日常使用最多的一部分,刚开始做电子工程师的,基本都是从这个开始的,下面的代码是我使用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;
本文以USART1为例,叙述串口中断的编程过程。 1、先来讲述一下在应用串口中断时涉及到的一些库文件。 首先对于STM32外设库文件的应用编程,misc.c和stm32f10x_rcc.c是肯定要添加到。 接下来就是我们要用到的相关外设了。毫无疑问,串口文件stm32f10x_usart.c是必须的。串口通信是对通用GPIO端口引脚的功能复用,所以还需要stm32f10x_gpio.c文件。另外,因为有中断的产生,所以中断文件stm32f10x_it.c也是必要的,当然这个文件一般和main.c 放在一个文件夹下(一般习惯为User文件夹),因为我们的中断响应函数是要在里面自己编写的。 当然还有其他的基本必须文件如系统配置文件等在这地方就不说了,这个是创建一个工程应该知道的。 2、初始化 对于串口通信的初始化,不仅仅只是对串口的初始化(这个地方是比较烦人的,不像别的芯片那样简洁明了)。 ●?首先时钟使能配置。STM32内部的时钟有很多,感兴趣的自己看看参考手册。此处 以USART1为例说明。有USART1时钟、GPIOA时钟、GPIO复用(AFIO)时钟。由于 此处USART1和GPIOA、AFIO均在APB2上,所以可以一次配置完成。如下: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO|RCC_APB 2Periph_USART1 ,ENABLE); ●?其次中断配置。主要有优先级组设定、USART1中断使能、该中断的优先级,中断初 始化。程序如下: void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);//选择分组方式0 /* 使能 USART1中断 */ NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } ●?然后GPIO复用功能配置。一般情况下我们使用原始的外设和GPIO端口引脚的映射 关系,如果要改变其映射的话,请另外查看参考手册上关于GPIO重映射部分。对 于GPIO的复用,其引脚的输入与输出模式都有要求,在参考手册上有详细说明。 void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; /* 配置 USART1 Rx 作为浮空输入 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(USARTy_GPIO, &GPIO_InitStructure); /* 配置 USART1 Tx 作为推挽输出 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
MSComm串行通讯控件设置串口、波特率等参数方法(转 (2010-03-07 14:07:21) 转载 分类:程序设计 标签: it 一.想一进入程序,有默认的串口参数设置: 1.把参数值设定死 在OnInitDialog()函数里添加: if (m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(1); // 选择com1 if (!m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE); // 打开串口 else AfxMessageBox("cannot open serial port"); m_ctrlComm.SetSettings("9600, n, 8, 1"); // 波特率9600,无校验,8个数据位,1个停止位 m_ctrlComm.SetInputMode(1); // 1表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); // 参数为1,表示每当串口接收缓冲区中有对于或等于一个字符时,将引发一个接收数据的OnComm事件 m_ctrlComm.SetInputLen(0); // 设置当前接收区数据长度为0 m_ctrlComm.GetInput(); // 先预读缓冲区以清除残留数据
2. 用COMBO BOX下拉框选择串口、波特率 m_cbPortSelect.ResetContent(); m_cbPortSelect.AddString(_T("COM1")); m_cbPortSelect.AddString(_T("COM2")); m_cbPortSelect.AddString(_T("COM3")); m_cbPortSelect.AddString(_T("COM4")); m_cbPortSelect.AddString(_T("COM5")); m_cbPortSelect.SetCurSel(3); m_cbPortRate.ResetContent(); m_cbPortRate.AddString(_T("1200")); m_cbPortRate.AddString(_T("2400")); m_cbPortRate.AddString(_T("4800")); m_cbPortRate.AddString(_T("9600")); m_cbPortRate.SetCurSel(0); 二.想动态地设置串口相关参数: CString str_setting; str_setting.Format(_T("%d, %c, %d, %d"), baud_num, 'n', 8, 1); m_ctrlComm.SetSettings(str_setting); // 设置波特率,校验位,数据位,停止位;m_ctrlComm是通信控件变量 想在Edit Box里显示实时值:
基础入门编 1.搭建开发环境 详情看光盘资料,主要是软件安装和设置。 2.新建工程 可以直接用模板,了解每个文件的含义,会使用chm帮助。 3.STM32库 库的含义。 4.GPIO流水灯 认识RCC,GPIO的各种模式,寄存器的种类和作用。 5.POLLING按键 主要介绍了各种模式,实验通过不断读取GPIO的状态以达到判断按键的目的。 6.EXTI按键 使用了GPIO的EXTI中断来判断按键,记住EXTI要开AFIO(重映射也要开),另外SYSTICK不归NVIC管。注意NVIC_IRQChannelSubPriority(),最多可以判断16种优先级,即16种中断,同一个中断入口的引脚引发的中断也算是同一种中断,同种种中断不能相互嵌套。(响应优先级是在抢占优先级相同时,同时发生才有用,其中一个发生后无用)。 7.SYSTICK 关键是SYSTICK的初始化函数,了解那几个寄存器的作用和特殊的宏定义(就是选择自己想选择的位),根据配置可以延时不同的时间,详情看代码。 8.串口通信 开启相应RCC,做好Iint,配置好中断(可选,主要用于接收),然后弄好fputc(),可以直接用printf()直接输出。 9.DMA 不经CPU处理直接相互传输,开启相应的DMA,配置好from..to..,字节大小等,用cmd 命令后可以开启传输。 10.ADC(DMA) 主要就是初始化好ADC,什么通道模式之类的,详情看代码,由于使用了DMA模式,要配置好DMA,有ADC_DMACmd()开始传输。 11..FSMC显示英文 用FSMC直接写入液晶的控制芯片的显存,注意使用的是16位的颜色,线的接法要注意(RGB为5:6:5)。 由于用的是模拟的方法,输入数据时用的都是宏,该地址线用来作为C/D,16位是往前移了一位的,因此要乘以2. 值得注意的是开窗的显示手法,在显示字符前先“开”一个窗,当一行数据写完时,自动换到下一行继续写。 在写数据的函数那里可以更换字的背景色,也可以修改该函数的.h的BACKGROUND 的宏定义。 FSMC的初始化暂时不清楚,应该是关于NOR FLASH的。控制代码是配好的,具体的设置看参考文档(有关定位坐标和扫描方式都与此有关)。 (NOR-FLASH 有4个bank,NE[3:0],区分不同的bank,实验用NE1;DataAddress_Mux 数据域地址线复用;8位地址线25:0->24:0 16位地址线25:1->24:0,宏定义是16位的地址线,对应的机内地址*2左移1位) 12.IIC-EEPROM
串口设置详解 本节主要讲解设置串口的主要方法。 如前所述,设置串口中最基本的包括波特率设置,校验位和停止位设置。串口的设置主 要是设置struct termios结构体的各成员值,如下所示: #include
路由器串口配置命令 https://www.sodocs.net/doc/e118407514.html,2002-12-11保存本文推荐给好友QQ上看本站收藏本站 1. async mode 设置异步串口的建立链路方式。 async mode { dedicate | interactive } 【缺省情况】 异步串口的缺省建立链路方式为直接方式(dedicate)。 【命令模式】 串口配置模式 【使用指南】 异步串口可以有两种建立链路方式: 直接方式(Dedicate):拨号成功之后,直接采用链路层协议配置参数建立链路。 交互方式(Interactive):拨号成功之后,主叫方向对端发送配置命令(与用户从远端手工键入配置命令效果相同),设置对端的链路层协议工作参数,然后建立链路。 比较常用的是直接方式,但在与同样支持交互方式的路由器(如Cisco路由器等)互连时,采用交互方式显得更为灵活。 交互方式一般与外接Modem以及Modem Script共同使用。 【举例】 设置异步串口建立链路采用交互方式。 Quidway(config-if-Serial0)#async mode interactive 【相关命令】 modem,chat-script 2. baudrate 设置串口的波特率。
baudrate baudrate 【参数说明】 baudrate为串口的波特率,单位为bps,取值范围300~4096000。 【缺省情况】 异步串口的缺省波特率为9600bps,同步串口的缺省波特率为64kbps。 由于同异步支持的波特率范围不同,当进行同异步切换时,如果现工作方式不支持原波特率,则将波特率修改为现工作方式下的缺省波特率。 【命令模式】 串口配置模式 【使用指南】 异步串口支持的波特率有: 300bps 600bps 1200bps 4800bps 9600bps 19200bps 38400bps 57600bps 115200b 同步串口支持的波特率有: 1200bps 4800bps 9600bps 19200bps 38400bps 57600bps 115200bps 56000bps 64000bps 72000bps 128000bps
ZXR10设备串口线线序以及波特率 A:注意设置:选择正确的控制线,如果从超级终端登陆,在端口设置时,先选择恢复默认 值(数据位:8;奇偶校验:无;停止位:1;数据流控:无),再修改为对应的波特率即可 登陆。 1)E系列 (包括GAR/GER/T64E/T128)控制线两头都是DB9母头,线序如下: COMM口DB9 信号后台计算机DB9 信号 1 T232DCD 7 computerRTS 2 T232RX 3 computerTX 3 T232TX 2 computerRX 4 T232DTR 6 computerDSR 5 GND 5 GND 6 T232DSR 4 computerDTR 7 T232RTS 1 computerDCD 8 不接8 不接 9 T232RI 9 computerRI T64E/T128设置:9600.8.n.1 GAR/GER设置:115200.8.n.1 2)C系列 控制线两头都是DB9母头,使用直连方式,线序如下: CM板console DB9 后台计算机DB9 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 设置:9600.8.n.1 具体:
控制模块DB-9连接器(DCE)PIN码管理控制台DB-9连接器(PC) 未用 1 未用 TXD (传送数据) 2 RXD(接收数据) RXD (接收数据) 3 TXD(传送数据) 未用 4 未用 GND (接地) 5 GND(接地) DTR (数据终端完成) 6 DSR(数据设置完成) CTS (清除发送) 7 RTS(请求发送) RTS (请求发送) 8 CTS(清除发送) 未用9 未用 3)1816、2826/S 控制线连接设备一端是DB9公头,连接PC的一端是DB9母头,线序如下: CONSOLE DB9 信号后台计算机DB9 信号 1 DCD 7 RTS 2 RX 3 TX 3 TX 2 RX 4 DTR 6 DSR 5 GND 5 GND 6 DSR 4 DTR 7 RTS 1 DCD 8 不接8 不接 9 RI 9 RI 1816设置9600.8.n.1 2826s设置115200.8.n.1 4)3904 控制线连接设备一端是RJ45,连接PC一端是DB9母头(和思科通用),线序如下: Console RJ45 信号后台计算机DB9 信号 1 空空空 2 空空空 3 TXD 2 RXD 4 GND 5 GND 5 GND 5 GND 6 RXD 3 TXD 7 空空空 8 空空空 设置9600.8.n.1
52单片机串口波特率设置函数 波特率设置太麻烦了吧,用函数设置吧,不必东奔西走的找了,个人自己写的代码,欢迎使用,不需要金币,好用就评价一下吧 注意了,仅用于52系列单片机,代码如下: /*----------52单片机波特率设置函数-------------- ------------------------------------------------ 作者:wenguang.li Email:liwg@https://www.sodocs.net/doc/e118407514.html,//wenguang.li@https://www.sodocs.net/doc/e118407514.html, MCU: *52 Cristal frequency unit MHz 晶体频率单位MHz Baudrate as you desired Example: set52_baudrate(11.0592,57600) Use Timer2 使用定时器2 ------------------------------------------------ ----------------------------------------------*/ //if osc=11.0592M //can set baudrate 110,300,600,1200,2400,4800,9600,19200,38400,57600,115200bps void set52_baudrate(float frequency,long int baudrate) { unsigned int itmp; unsigned char tlow,thigh; itmp=(int)(65536-(frequency*1000000)/(baudrate*32)); thigh=itmp/256; tlow=itmp%256; SCON=0x56; T2CON=0x30; RCAP2H=thigh; RCAP2L=tlow; TH2=thigh; TL2=tlow; TR2=1; //set ok } /////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////
程序实现功能:可以直接接收USART1的数据,并通过串口调试输出显示 #include"stm32f10x_lib.h" void NVIC_Configuration(void); void RCC_Configuration(void); void GPIO_Configuration(void); ErrorStatus HSEStartUpStatus; USART_InitTypeDef USART_InitStructure; USART_ClockInitTypeDef USART_ClockInitStructure; int main() { #ifdef DEBUG debug #endif RCC_Configuration(); NVIC_Configuration(); GPIO_Configuration(); /*串口传输速率的大小必须与RCC所设定的时钟相对应起来*/ USART_https://www.sodocs.net/doc/e118407514.html,ART_BaudRate = 9600; //设置USART的传输速率/*设定数据的接收发送模式*/ USART_https://www.sodocs.net/doc/e118407514.html,ART_WordLength = USART_WordLength_8b;//在一帧中传输或接受8位数据位 USART_https://www.sodocs.net/doc/e118407514.html,ART_StopBits = USART_StopBits_1; //定义在帧的结尾传输一个停止位 USART_https://www.sodocs.net/doc/e118407514.html,ART_Parity = USART_Parity_No; //奇偶失能 USART_https://www.sodocs.net/doc/e118407514.html,ART_HardwareFlowControl = USART_HardwareFlowControl_None; //指定硬件流控制模式RTS和CTS使能 USART_https://www.sodocs.net/doc/e118407514.html,ART_Mode = USART_Mode_Rx | USART_Mode_Tx; //指定使能或失能发送和接受模式Tx发送使能和Rx接收使能 USART_Clock https://www.sodocs.net/doc/e118407514.html,ART_Clock = USART_Clock_Disable; //提升USART时钟时使能还是失能,钟低电平活动 USART_https://www.sodocs.net/doc/e118407514.html,ART_CPOL = USART_CPOL_Low; //指定SLCK引脚上时钟的极性 USART_https://www.sodocs.net/doc/e118407514.html,ART_CPHA = USART_CPHA_2Edge; //时钟第二个边缘进行数据捕获 USART_https://www.sodocs.net/doc/e118407514.html,ART_LastBit = USART_LastBit_Disable; //在SCLK引脚上输出最后发送的那个数据字的脉冲不从SCLK输出 USART_ClockInit(USART1, &USART_ClockInitStructure); USART_Init(USART1, &USART_InitStructure); /*输入输出的中断使能*/ // USART_ITConfig(USART1, USART_IT_TXE, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
串口基本配置命令 【命令】async mode { protocol | flow | tty | printer | posapp | pos id } 【视图】异步串口视图、AUX 接口视图 【参数】protocol:协议模式。指物理连接建立之后,接口直接采用已有的链路层协 议配置参数建立链路。flow:流模式,也称交互模式。指物理连接建立之后,链路的两端进行交互,主叫端向接收端发送配置命令(与用户从远端手工键入配置命令效果相同),设置接收端的链路层协议工作参数,然后建立链路。一般用于拨号等人机交互的情况下。tty:终端接入方式。当路由器的异步串口用于终端接入服务时,通过此关键字以及相应参数来设置待接入的物理终端和虚终端(VTY)号。 【描述】async mode 命令用来设置异步串口的工作方式。缺省情况下,异步串口工作在协议方式(protocol 方式),AUX 接口缺省工作在流方式(flow)。 【举例】# 设置异步串口工作在流方式。 [Quidway-Serial0]async mode flow 【命令】baudrate baudrate 【视图】串口视图 【参数】baudrate:串口的波特率,单位为bps。对于异步串口取值范围为300~115200,对于同步串口取值范围为1200~2048000。 【描述】baudrate 命令用来设置串口的波特率。缺省情况下,异步串口的缺省波特率为9600 bps,同步串口的缺省波特率为64000 bps。 异步串口支持的波特率有:300 bps、600 bps、1200 bps、2400 bps、4800 bps、9600 bps、19200 bps、38400 bps、57600 bps、115200 bps。 同步串口支持的波特率有:1200 bps、2400 bps、4800 bps、9600 bps、19200 bps、38400 bps、57600bps、64000 bps、72000 bps、115200 bps、128000 bps、384000 bps、2048000bps。 另外同步串口对于不同的物理电气规程,所支持的波特率范围有所不同。 &<048698;&O1472;V.24 DTE/DCE:1200 bps~64000 bps &<048698;&O1472;V.35 DCE/DCE、X.21 DTE/DCE、EIA/TIA-449 DTE/DCE 以及EIA-530 DTE/DCE:1200 bps~2048000 bps 当同/异步串口进行同异步切换时,接口的波特率将恢复为新工作方式下的缺省波特率。 在设置串口波特率时,要注意串口的同异步方式以及外接电缆的电气规程等因素。另外要注意异步串口的波特率只在路由器与Modem 之间起作用,两台Modem 之间的波特率则由它们互相协商确定,因此在异步方式下两端路由器的波特率设置可以不一致;在同步方式下,由DCE 侧路由器决定线路传输的波特率,只需在DCE 侧设定即可。 【举例】# 设置异步串口的波特率为115200 bps。 [Quidway-Serial0]baudrate 115200 【命令】clock { dceclk | dteclk1 | dteclk2 | dteclk3 | dteclk4 } 【视图】串口视图 【参数】无 【描述】clock 命令用来设置同步串口的时钟选择方式。缺省情况下,作为DCE 设备的情况,为DCEclk (即向DTE 设备提供时钟);作为DTE 设备的情况,为DTEclk3。同步串口有两种工作方式:DTE 和DCE。不同的工作方式有不同的时钟选择。如果同步串口作为DCE 设备,需要向对端DTE 设备提供时钟,这时需要选择DCEclk;如果同步串口作为DTE 设备接受对端DCE 设备提供的时钟,由于同步设备的接收和发送时钟是独立的,则DTE 设备的接收时钟可以选择DCE 设备的发送或接收时钟,而且DTE 设备的发送时钟也可以选择DCE 设备的发送或接收时钟,产生四种组合,即在DTE 侧可以有四种时钟选择。 【举例】# 设置同步串口作为DTE 设备的时钟选择方式为DTEclk2。 [Quidway-Serial0]clock dteclk2