STM32关于USART的问题
1、STM32103 USART1死机
问:void USART_Receive(USART_TypeDef* USARTx)
{
if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)
{
USART_ClearFlag(USARTx,USART_FLAG_RXNE);
s[0]=USART_ReceiveData(USART1);
delay(1000);
s[1]=USART_ReceiveData(USART1);
delay(1000);
s[2]=USART_ReceiveData(USART1);
delay(1000);
write_char(s[0],s[1],s[2]); //发送数据到PC
//if(s[0]==0xff){GPIO_WriteBit(GPIOE,GPIO_Pin_0,Bit_SET);} // //write_char(s[0],s[1],s[2]);
// query_uart_command(); //命令判断
}
}
上面程序在
发送FF的时候收到FF FF FF
发送FF 22的时候收到FF 22 22
发送FF 22 33时收到FF 22 22
之后再发送数据时串口不响应!!!
答1:你这个程序,你收到第一个字节后,清标志,然后等待接后后面两个没有清标志。这也和两次发送时间 间隔有关
答2:stm32串口有个可以说是bug的地方,就是即使不使能溢出等其他错误中断的情况下,若发生溢出错误,仍会进入中断,而且常规检查中断的方法无法查到中断标志。所以办法就是在串口正常中断处理之后加清除中断的语句。具体网上可以找到。之前因为这个原因,程序经常死掉,结果是死在串口中断处理里,不停中断,有没有清除中断标志哦。
2、STM32F207的串口问题
问:使用官方提供的串口例程时,定义串口2~5都没有问题。使用串口1或串口6时,无数据输出。TXD线上只是低电平。求解。。。。
附上代码。
串口2~5,先提供官方例程
按照例程,将串口3改为串口1后,串口1不能工作,TXD线上是低电平,
仿真时发现,程序停留在
while (USART_GetFlagStatus(EVAL_COM1, USART_FLAG_TXE) == RESET)
{
}
这个地方。
串口1的引脚定义是PA.09,PA.10
答1:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE) for USART1 and USART6 * RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE) for USART2, USART3, UART4 or UART5. *
3、stm32中的串口通信中的USART_WordLength,数据位的长度包不包括开始位哪些?
问:stm32中的串口通信中的USART_WordLength,数据位的长度包不包括开始位哪些?
答:不包括开始位,如果你有 校验(奇 偶)的话,数据位是包括校验位的。USART_WordLength 这个是可以设 9
4、stm32的DMA 到usart
问:把一个数组的数据传输到USART。设为Circular时,DMA是不是会自动不停的传输数据?既是main函数里没有调用传输,DMA也会不停把数组的数据传给USART?不受main控制?DMA数据传输还是受CPU的控制的?需要认为的调用?
答:设置成循环的只是说当数据传输量寄存器里面的内容变为零会重新加载,然后重新传输,但是这一切前提都是进行了设置和使能(这里应该是DMA请求,我还没看出来别的使能方式,正在学习呵呵),但是记住只有再怎么写好设置的子函数或者说模块,如果没有main里调用,不会运行的,因为单片机只执行MAIN里的函数,如果没有调用语句,是不会自己跑到DMA设置子函数里的,也就是说不会不断执行。人为调用,设置一下各个寄存器,有传输的来源和目的设置有传输数据量设置等等,设置完了,开启就可以了,CPU可以去干别的,看一下参考手册就知道了。
5、STM32串口接收程序
问:在STM32串口接收程序里 USART_GetFlagStatus(USART1,USART_FLAG_ORE)==RESET 这句语句是什么意思?
答:查寻串口标志,为0还是1,reset 为0,set 为1,还有清除标志位的作用
6、STM32F10XX系列SPI和USART区别
问:STM32F10XX系列SPI和USART区别?我想用USATR对SD卡进行读写是否可行?我用USART的同步方式跟SPI是一样的吗?我用的STM32中的USART可以接SPI设备,它是一个同步/异步收发器。我在看开发板时看到有开发板是用SPI对SD卡进行操作的。应该是用的SD卡的MMC/SPI模式。只是没有见到用它的USART读写SD卡的例子,不知道哪有这方面的资料。
答:请先SPI和USART都没有搞清楚,再搞用USATR对SD卡进行读写,我不知道你的sd卡是哪个型号,但是一般的存贮器件不会采用uart口的,SD卡是用来存储大容量数据的,读写数据在速度在要求快,而uart口的速度一般不会很快,你看看你的串口调试助手就知道了,上面有波特率,所以sd卡不会用uart口来读写的,再说了,用什么口来读写sd卡都是一样的,你只要按照datasheet 的命令格式给卡发送命令就可以操作它了,建议不要纠结这个问题!
关于STM32的中断问题
1、STM32的EXIT的库函数
问:EXTI_GetFlagStatus和EXTI_GetITStatus区别是什么?
答:一个是获取状态也的,一个是获取中断的。你可以看一下函数上面的说明。
2、STM32的外部中断
问:STM32的外部中断响应的最大频率是多少?
答:应该是2-3个机器周期
3、判断中断是否会被响应的依据是什么?
答:1、首先是占先式优先级,其次是副优先级; 2、占先式优先级决定是否会有中断嵌套; 3、Reset、NMI、Hard Fault 优先级为负(高于普通中断优先级)且不可调整。
4、什么是占先式优先级?
答:占先式优先级(pre-emption priority): 高占先式优先级的中断事件会打断当前的主程序/中断程序运行——抢断式优先响应,俗称中断嵌套。
5、什么是副优先级?
答:副优先级(subpriority):1、在占先式优先级相同的情况下,高副优先级的中断优先被响应; 2、在占先式优先级相同的情况下,如果有低副优先级中断正在执行,高副优先级的中断要等待已被响应的低副优先级中断执行结束后才能得到响应——非抢断式响应(不能嵌套)。
6、中断不进入是什么原因?
答:1、未开启接收中断; 2、未配置中断向量开启
7、 STM32的EXIT的库函数
问:EXTI_GetFlagStatus和EXTI_GetITStatus区别是什么?
答:一个是获取状态也的,一个是获取中断的。你可以看一下函数上面的说明。
8、STM32的外部中断
问:STM32的外部中断响应的最大频率是多少?
答:应该是2-3个机器周期
9、STM32的EXIT的库函数问题
问:EXTI_GetFlagStatus和EXTI_GetITStatus区别是什么?
答:一个是获取状态也的,一个是获取中断的。你可以看一下函数上面的说明。
关于STM32的SPI问题
1、STM32F207 使用SPI2收不到数据的问题
问:我使用STM32F207的SPI2控制模数转换器AD977时, STM32F207处理器的SPI2工作在单向只接收模式(从模式)下,我的SPI2总是接收不到数据(但在SPI2_MOSI管脚上有数据,时钟也有,我用示波器看的),请帮我分析一下。我的SPI及管脚配置如下:
- void SPI2_Config(void)
- {
- //NVIC_InitTypeDef NVIC_InitStructure;
- /* Enable the SPI clock */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
- /* Enable GPIO clocks */
- RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
- /* Connect SPI pins to AF5 */
- //GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
- //GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
- //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
- /* SPI SCK pin configuration */
- //GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13;
- //GPIO_Init(GPIOB, &GPIO_InitStructure);
- /* SPI MOSI pin configuration */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
- //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
- //GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- /* SPI configuration -------------------------------------------------------*/
- SPI_I2S_DeInit(SPI2);
- SPI_Cmd(SPI2, DISABLE);
- SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
- SPI_InitStructure.SPI_Mode=SPI_Mode_Slave;
- SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;
- SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
- SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
- SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
- SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
- SPI2->CR1=0<<8;
- SPI_Init(SPI2, &SPI_InitStructure);
- //SPI_TIModeCmd(SPI2, ENABLE);
- SPI_Cmd(SPI2,ENABLE);
- }
复制代码
答:GPIO的模式改为GPIO_Mode_AF_PP
2、关于STM32的SPI
问:SPI口,同步串行通信中的“同步”指的是什么?
答:同步,是指在通信过程中,被控制的对象与主机的时钟是相同的,都是由主机发出。
3、STM32F10X SPI时序 疑惑
问:这两天学习了STM32F10X系列的SPI模块,发现其时序问题,感到非常疑惑:通过CPOL和CPHA两个位来控制收、发时序;根据时序图可以看出:发送、接收是在同一个时钟边沿采样!可是我接触过的所有使用SPI通信的外围芯片,发送和接受都是在不同的时钟边沿采样,这样的话,发送、接收肯定有一方采集到的数据存在错误的可能。目前正在调试开发板的SPI模块,和AT45DB161B通信,目前还没有成功,请高手指点!
答:SPI通讯的方式有3种、4线、3线、2线型。你使用的是那种情况?
答:4线全双工
答:你说的情况是不会发生的,这个你可以参考SPI4线的通讯方式。通讯不了,首先排除硬件问题,再次排除程序通讯问题。
4、使用SPI外设时如何设定NSS为通用IO口?
答:主模式和从模式下均可以由软件或硬件进行NSS管理; 将SPI_CR1寄存器的SSM位置为1时,NSS引脚将被释放出来用作GPIO口;使用STM32软件库时,初始化SPI外设时,使用如下代码: SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; 如果NSS引脚用于其他外设时,需要使能NSS输出: SPI_SSOutputCmd(SPIx, ENABLE);
关于STM32的I2C问题
1、I2C上电过程故障,复位后即正常,有可能是什么原因?
问:如题:I2C1总线上挂有一片24C02(Addr:0xA0)和另一个I2C总线器件(Addr:0xAC),上电后配置完毕I2C1(库操作,100K)后既执行24C02的读写,完毕后,执行另一I2C器件的读写。
现象1:每次断电、再重新上电后,程序一直停在24C02的写过程中,另一片I2C芯片也不响应;
现象2:如果是直接按复位键,则程序可以顺利执行,并且两片I2C器件均可正常访问和读取。
请问:有可能是什么原因造成这样的问题,SCK速度100K,示波器显示SCK为50%占空比。
答:这个问题是,由于上次写E2的时候导致I2C总线错误,而E2这个时候并不能正确的接收数据。解决方法,断电的时候或者操作完毕以后将I2C总线停止,或者断电的时候将E2断电。
答:你的電路啟動的RESET的時間可能不夠。因為你提到按下RESET按鍵之後就都可以正常動作。哪表示你的POWER ON Reset 有問題。
2、STM32的I2S问题
问: 最近有个项目,想用STM32录播音频,不知道STM32的I2S接口能不能和CODEC的I2S接口,同时录音、播放,就是通过CODEC的AD进来的数据同时发送到CODEC的DA输出。有没有相关的参考设计?
答: 这个是可以的!我用了wm8974!用两个i2s口实现!stm32f4是全双工的!只用一个就行了!
3、STM32的I2S问题
问:最近有个项目,想用STM32录播音频,不知道STM32的I2S接口能不能和CODEC的I2S接口,同时录音、播放,
就是通过CODEC的AD进来的数据同时发送到CODEC的DA输出。有没有相关的参考设计?答:这个是可以的!我用了wm8974!用两个i2s口实现!stm32f4是全双工的!只用一个就行了!很好用有问题可以liufeng5@sohu.com咨询
4、I2C上电过程故障,复位后即正常,有可能是什么原因?
问:I2C1总线上挂有一片24C02(Addr:0xA0)和另一个I2C总线器件(Addr:0xAC),上电后配置完毕I2C1(库操作,100K)后既执行24C02的读写,完毕后,执行另一I2C器件的读写。
现象1:每次断电、再重新上电后,程序一直停在24C02的写过程中,另一片I2C芯片也不响应;
现象2:如果是直接按复位键,则程序可以顺利执行,并且两片I2C器件均可正常访问和读取。
请问:有可能是什么原因造成这样的问题,SCK速度100K,示波器显示SCK为50%占空比。
答:这个问题是,由于上次写E2的时候导致I2C总线错误,而E2这个时候并不能正确的接收数据。解决方法,断电的时候或者操作完毕以后将I2C总线停止,或者断电的时候将E2断电。
5、STM32的I2C奇怪现象
问:如果先把I2C的相关I/O口配置成通用输入接口,然后在配置成I2C的接口,测试I2C功能正常;但是如果把I/O口先配置成通用输出接口,再配置成I2C接口,测试I2C功能就不正确。
答:I2C的IO口必须要配置成对应的功能,也就是输入,这个时候才能工作。这个是I2C模块必须要配置的,就像串口的IO口,也要配置成对应的传输方向。
6、STMF103 I2S 时钟调整方案
问:通常音频的采样速率均为44.1K/S,若有72M的时钟,同时需要MCLK输出,这样根据手册FS只能为46.875这样速率精确度太差,误差达到6.29%,是否可以考虑将时钟将为56M,这样可以将FS调整到43.75,误差为0.8%
答:不知道你用的是16位的还是32位的,根据表的值,你选择16位的,44117.65这个值的误差比较小0.04%。 如果选择22.050K/S,22058.822,16位和32位的误差是0.04%。
7、I2S使用的注意事项
问:I2S使用时需要注意什么?I2S2_WS,I2S2_CK,I2S2_SD,I2S2_MCK如何设置MCK是不是只支持256FS, 对于无法进行编程的I2S解码器,如何设置中断。
最佳答案:
1、小容量和中容量的STM32不支持I2S音频协议。
2、I2S与SPI共用3个引脚:
SD:串行数据(映射至MOSI引脚),用来发送和接收2路时分复用通道的数据;
WS:字选(映射至NSS引脚),主模式下作为数据控制信号输出,从模式下作为输入;
CK:串行时钟(映射至SCK引脚),主模式下作为时钟信号输出,从模式下作为输入。
MCK:主时钟(独立映射),在I2S配置为主模式,寄存器SPI_I2SPR的MCKOE位为’1’时,作为输出额外的时钟信号引脚使用。输出时钟信号的频率预先设置为256 × Fs,其中Fs是音频信号的采样频率。
3、I2S接口与SPI接口使用大致相同的引脚、标志和中断。
关于STM32的PWM问题
1、STM32F10X定时器PWM输入模式测量频率、占空比精度问题
问:今天使用了STM32F10X定时器PWM输入模式,用来测量输入方波信号的频率和占空比,发现精度不高,设置定时器的时钟频率为36MHz,预分频为35,计数频率为1MHz,即精度为1us,当输入信号为500Hz时,测量值为500Hz,当输入信号为1KHz时,测量值为1000.1,当输入信号频率继续增加时,测量误差越大,之后提高定时器的技术频率为72MHz,精度有提高,但是输入信号频率增加,误差越大,同时对于低频信号需要使用更新中断才能处理。
请假各位大侠是如何处理精度和低频信号测量的问题?
答:能不能看看你的代码配置。还有要注意TIM的范围,可能约接近最大值,误差可能会有所变化。
答:设置为:PWM输入模式,计数精度为1us ,没有考虑溢出的情况,同时也没有使用低于500Hz的信号做测试,当提高技术精度为100ms甚至更小时,相同频率下误差减小,但是误差还是随着频率增加而变大,然后自己看了Datasheet,发现里面有一句这样的话:TI1的上升沿和计数器实际复位之间的延时,取决于TI1输入端的重同步电路,也就是说肯定有延时,而且延时不确定,当测量频率越高时,延时对结果的影响自然越大。另外我使用捕获功能来测量频率,考虑溢出,计数精度1us,在100KHz内,基本上没有误差。
2、stm32f103 PWM 互补通道 问题
问:stm32PWM 互补通道在禁止输出时可不可以均默认为高或变为浮空输入通道 不要在每次发生通道变换时认为的去修改寄存器!
答:函数TIM1_ForcedOC1Config可以,看下固件库手册,没问题的!
3、STM32的DAC输出脉冲
问:STM32的DAC上电时输出一个幅值100mV,脉宽5ms的脉冲,影响后面电路的工作,怎么去掉这个脉冲呢?
答:关闭DAC波形输出
4、PWM input capture
问:在测试PWM input capture时,使用TIM3—CH2通道,则IC1和IC2影射到TI2上,此时CCR2 register捕获PWM的period,CCR1 register捕获PWM的duty cycle,IC1和IC2开始捕获计数。如果这个PWM的周期比较长,IC2计数值超过65535溢出之后会怎么办?溢出的值是不是舍弃掉了?还能通过CCR1/CCR2这个公式来计算占空比吗?
答:溢出以后会将产生中断,如果周期比较长,建议使用计数器来判断。或者降低模块频率。
关于STM32的USB问题
1、stm32f10x usb无法识别
问:我现在用的片子是103t8和开发板的是103vct6的,没有8M的晶振所以我用了6 M的但是程序里面我已经改了,12倍频,usb时钟1.5分频我没动,还是开发板的那部分,1.5k的上拉直连3.3,我把开发板控制usben的管教断开直接接了3.3v上拉也可以识别usb 我做的板子也改了1。5的上拉接3.3v还是不能识别,两个程序的差别只有外部晶振倍频系数不同求解
答:解决这个办法 1、你先用8M晶振试试程序,如果还是不行,就说明当前硬件有问题 2、时钟配置的时候,分频晶振、倍频,然后获得系统时钟,建议你检查一下这段代码,确定系统时钟是72M的。
关于STM32的JLINK问题
1、使用JTAG download程序至STM32F205XX(with Cortex-M3)
问:請教各位先進,若欲使用JTAG interface下載程序至STM32F205XX的板子,似乎一般是透過SEGGER的J-link,是否可使用其他的JTAG-USB下載線如Altera出的USB Blaster? 又是否只要符合JTAG規範的傳輸線皆可?
答:只要支持M3并且支持STM32F2XX系列就可以,不一定非要JTAG,也可以使用SWD。
关于STM32其他问题
1、使用JTAG download程序至STM32F205XX(with Cortex-M3)
问:請教各位先進,若欲使用JTAG interface下載程序至STM32F205XX的板子,似乎一般是透過SEGGER的J-link,是否可使用其他的JTAG-USB下載線如Altera出的USB Blaster?
又是否只要符合JTAG規範的傳輸線皆可?
答1:只要支持M3并且支持STM32F2XX系列就可以,不一定非要JTAG,也可以使用SWD。
答2:ARM KEIL ULINK也行,兼容性非常好呀!
2、STM32触摸屏
问:我想用STM32来触摸一款触摸屏,因为我现在还不了解STM32以及触摸屏,所以我想问一下,具体用那款单片机型号最好? 最好是STM32内部已经具有触摸屏的控制器了。屏有没有数据传输总线是32位的,正好和单片机总线一样 。另要求屏的色彩深度也是32位或者是24位。3.2寸左右,这个可大也可小点。 能不能也推荐一款触摸屏的型号,以及相关资料。
答:1、这个需要根据显示屏来决定,市场上也有很多触摸的显示屏,STM32可以用过SPI、FMCS、IO口等来控制,这个要看你选择的类型 2、型号和资料,这个要找厂家要,厂家一半都会给你合适的建议和 源代码。
3、STM32可以做什么
问:学习了STM32可以做什么?有什么用途或者前途,请告诉,不胜感谢。
答:可以用的方面比较多,比如工业、消费、医疗等。这个要根据产品的需求来决定使用的芯片。
4、STM32F2X系列能能驱动多大尺寸TFTLCD呢?用FSMC模式
问:STM32F2X系列能能驱动多大尺寸TFTLCD呢?用FSMC模式,显示简单的菜单,参数等操作
答:这个没有具体的参数,个人认为10.0一下都没问题。
5、VDD与VSS的去藕电容如何处理?
问:VDD与VSS的去藕电容如何处理?
答:1、每对VDD与VSS都必须在尽可能靠近芯片处分别放置一个10nF~100nF的高频瓷介电容 2、在靠近VDD3和VSS3的地方放置一个4.7μF~10μF的钽电容或瓷介电容。
6、系统时钟的监控和切换的作用是什么?
问:系统时钟的监控和切换的作用是什么?
最佳答案:STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE)失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。
7、PVD的作用是什么?
答:在应用开发中,通常都要考虑到当系统电压下降或掉电状况,一旦出现该状况应对控制系统加以保护。故在程序中需要加入对系统电压的监控。当供电电压降低到某一电压值时,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作。
8、STM32的三种低功耗模式是什么?
答:1、睡眠模式Sleep:电压调节器开启,Cortex-M3内核停止运行,外设保持运行态; 2、停止模式Stop:电压调节器可选择性开启,所有外设时钟、PLL、HSI和HSE被关闭,Cortex-M3内核和所有外设停止运行,保留SRAM和寄存器的内容; 3、待机模式Standby:电压调节器关闭、整个1.8v区域断电。除了备份区域和待机电路的寄存器以外,SRAM和寄存器的内容全部丢失。
9、STM32103RB的TIM2 channel1以及UART2的CTS都是PA0 pin, 他们是怎么区分的?
答:IC的一根管脚,做多种外设的复用pin,很常见,在PA0上,只能作为一种外设的管脚,但两个外设能同时用吗,当然是可以的。可以设置STM32中有的寄存器AFIO_MAPR来配置复用管脚及外设接口的重新映射,比如你选择PA0为UART2的CTS,PA0肯定不能再作为TIM2的channel1,但可以设置TIM2的channel1的管脚为PA15,请参考如下寄存器说明: Bits 9:8 TIM2_REMAP[1:0]: TIM2 remapping These bits are set and cleared by software. They control the mapping of TIM2 channels 1 to 4 and external trigger (ETR) on the GPIO ports. 00: No remap (CH1/ETR/PA0, CH2/PA1, CH3/PA2, CH4/PA3) 01: Partial remap (CH1/ETR/PA15, CH2/PB3, CH3/PA2, CH4/PA3) 10: Partial remap (CH1/ETR/PA0, CH2/PA1, CH3/PB10, CH4/PB11) 11: Full remap (CH1/ETR/PA15, CH2/PB3, CH3/PB10, CH4/PB11)
10、CSMA/CA算法
问:STM32W108CBU64执行一次CSMA/CA算法是延时多长时间?
RadioTransmitConfig radioTransmitConfig = {
TRUE, //waitForAck
TRUE, //checkCca
RADIO_CCA_ATTEMPT_MAX_DEFAULT, //ccaAttemptMax
RADIO_BACKOFF_EXPONENT_MIN_DEFAULT, //backoffExponentMin
RADIO_BACKOFF_EXPONENT_MAX_DEFAULT, //backoffExponentMax
TRUE //appendCrc
};
答1:更简单的可以设置两个断点,看下右下方的运行时间,就知道了!
答2:这个没有计算过,你可以在计算前加个定时器获取值,计算完以后再获取一下定时器的值,这样就知道时间了。
11、STM32F4系列软件仿真问题
问:STM32F4系列能用Keil4.54,的debug进行软件仿真吗? 我一仿真,程序指针跳到0x00000000处。很奇怪,而且peripherals菜单选项没有了。 请问这是怎么回事?
答:可以。说明你程序有错误,而不能跳到启动。你应该下载一个最新的KEIL
12、进入SLEEP模式的省电要操作哪些流程?
问:进入SLEEP模式的省电要操作哪些流程?
最佳答案:
1、关闭无需等待中断或事件的外设时钟;
2、设置进入机制(Sleep-Now或Sleep-on-Exit);
3、设置系统进入SLEEP模式。
13、STM32W 的 wireshark 用Mxchip 的ADK-DK 可以充当吗?
问:STM32W 的 wireshark 用Mxchip 的ADK-DK 可以充当吗?
答:Wireshark 抓包器需配合MXCHIP的sniffer-W使用,ADK-DK无法充当。
14、STM8A不能从CAN接收中断中唤醒Halt模式
问1:我是做车载CAN通信的,使用STM8AF51AA的MCU,但是发现CAN接收中断不能唤醒Halt模式,但是改成Wait模式就可以唤醒,Walt模式的功耗过高,不符合车厂的要求。说明书上是说两种都可以唤醒的,我现在不知道是我的设计有问题还是芯片不支持,哪位大虾遇到这种情况的,可以跟大家一起分享吗?谢谢啦!
答1:1、WKUIE中断开启了吗? 2、支持该功能,你怎么判断他没有进入唤醒?第一包的数据会丢失。
问2::WKUIE中断已经开启,因为我在Wait模式下可以正常唤醒,所以中断设置是正常的,我在中断函数里面打个断点,等待中断的到来。
答2:这个时候仿真不管用。你最好使用LED和串口调试信息
15、F0 discovery 固件库在IAR6.0上运行时提示错误
问:IAR ELF Linker V6.40.3.54009/W32 for ARM
Copyright 2007-2012 IAR Systems AB.
Error[Li005]: no definition for "SYSCFG_EXTILineConfig" [referenced from F:新建文件夹STM32F0系列测试程序Test1DebugObjstm32f0_discovery.o]
是哪里的问题呢?我运行demo就无错误
Error[Li005]: no definition for "EXTI_Init" [referenced from F:新建文件夹STM32F0系列测试程序Test1DebugObjstm32f0_discovery.o]
2 358 bytes of readonly code memory
90 bytes of readonly data memory
1 057 bytes of readwrite data memory
Errors: 2
Warnings: none
Link time: 0.05 (CPU) 0.05 (elapsed)
Error while running Linker
Total number of errors: 2
Total number of warnings: 0
答:说明这2个没有被定义,请仔细看一下,是否正确定义。
16、系统时钟的监控和切换的作用是什么?
问:系统时钟的监控和切换的作用是什么?
最佳答案:STM32作为一个可靠稳定的微处理器,但是不能排除由于某些外界特殊因素可能造成STM32的外部振荡器失效,所以在芯片中需要一种包含机制能够在STM32运行时,一旦外部晶体振荡器(HSE)失效,切换STM32的系统时钟源到一个稳定的时钟源,以保证STM32能够继续运行,并进行相应的保护操作。
17、STM32W108CBU64执行一次CSMA/CA算法是延时多长时间?
问: RadioTransmitConfig radioTransmitConfig = {
TRUE, //waitForAck
TRUE, //checkCca
RADIO_CCA_ATTEMPT_MAX_DEFAULT, //ccaAttemptMax
RADIO_BACKOFF_EXPONENT_MIN_DEFAULT, //backoffExponentMin
RADIO_BACKOFF_EXPONENT_MAX_DEFAULT, //backoffExponentMax
TRUE //appendCrc
};
最佳答案:更简单的可以设置两个断点,看下右下方的运行时间,就知道了!
18、STM32F407和Android系统的平板电脑通讯问题
问:请问我想用stm32f407的usb和Android系统的平板电脑通讯,现在我知道在xp和w7系统下都可以做到,那在Android下能兼容吗?如果不兼容都需要做哪些工作呢?希望能进快给我答复谢谢。
答1:按照android的通讯协议做就可以。
答2:这个方向我也正在做、已经琢磨了很长时间了、有难度、关键是硬件不懂软件、软件不懂硬件还有协议的问题、后来考虑了个方法但是还没有实施你可以实施看、用stm32枚举成U盘、将你要表达的
协议写成文件格式、你需要收的文件也由android做成文件、以文件的形式来交互协议
19、关于100Pin MCU FSMC的应用咨询
问:根据ST datasheet描述,100pin mcu 的fsmc只支持NE1和NCE2,意味着只能外挂Nor/PSRAM和无中断功能的Nand,并且低地址A[15:0]和D[15:0]是复用方式。
请问:
1:NADV信号是否只有在Nor模式下才能有效输出锁存信号,而在SRAM模式下输出无效信号?
2:如果外挂一颗IS64LV25616这样的SRAM,该如何将复用的A和D分开?
3:如果使用100pin这样的FSMC,是否一定要外加地址锁存器,诸如74XX573这样的芯片才能将复用的A和D分开?
4:如果使用100pin这样的FSMC,市场上有没有与之对应的Nor和SRAM,可以自己解锁出总线上的A和D,ST有没有这样的chip?
答:1、我要看看手册 2、AD复用,也就是只能用1个 3、最好加锁存器 4、有对应SRAM,这个你可以参考各个开发的设计
20、stm32F207的相关资料从何处下载?
问:stm32F207的相关资料从何处下载?比如说,库函数,应用说明,时钟等等。最近做项目要使用stm32F207,但对这款芯片了解甚少。
答:您好,这个可以到社区的资料下载。或者到官方网站的F20X资料区下载。
21、STM32的官方例程在哪下载呢?
问:STM32的官方例程在哪下载呢?
答:你好,社区的资料下载栏目,以及论坛里都可以找到。
22、用内部HSI时钟时,外部时钟引脚应该悬空还是接地?
问:用内部HSI时钟时,外部时钟引脚应该悬空还是接地?
最佳答案:悬空。接地都可以。最好是接地
23、stm32f103c8t6芯片烧写问题
问:如题芯片首次jlink烧写程序没有任何问题,第二次烧写,jlink就不能识别,请问什么原因?
现在是第一次连接上jlink以后,jlink就出现问题了,直接显示是红灯了还有一个问题,jtag的上拉下拉电阻是不是可以不接?还有32.768Khz的晶振是不是也可以没有?
答:第一次烧录时应该是空的IC吧,没有烧录过任何CODE吧。用JLINK烧录完成后会自动断开连接,如果你没有对BOOT进行设置就不能再次烧录。BOOT设置可以查看DATA SHEET。
24、CPU休眠后无法唤醒
问:CPU休眠后,RTC无法让它唤醒,外部触发也不能唤醒,示波器测试小晶振,有正常的波形
答:这种情况也有可能是因为你对数组或者指针操作的时候引起的程序错误,而进入硬件错误中断。
25、请问STM32W108CBU64可以构成星型网络吗?
问:可以组成多少个子节点?
最佳答案:一个局域网可以有很多电脑,只要IP地址不一样就可以
26、请问各位大虾STM32F207的Camera接口支持ITU-R BT.656格式的数据输入吗?
问:本人想通过TVP5150将复合视频信号转为ITU-R BT.565后,经STM32F207的Camera接口送到LCD显示,不知道是否能实现,请各位指教。
答:可以,但是效果不是很好。毕竟频率才72Mhz。
27、stm32f107广域网互联
问:利用两块STM32F107开发板,分别置于两个不同的地区,如何通过公网建立通信,传输语音和其他的一些控制信息 是不是还要用到路由器之类的
答:如果你的距离不超过100米,可以直接用以太网连接,如果超过,就需要走网络了。如宽带,GPRS等。
28、关于LWIP和freertos的问题
问:请教大家一个问题,我现在想做lwip和freertos的移植,我在金牛 STM32F107_ETH_LwIP_V1.0.0例程的基础之上移植了freertos,为了验证我的系统移植没 有问题,首先我通过利用二值信号量的方式,实现了按键中断等简单程序,在这些都成 功的情况下我把System_Periodic_Handle();做在了一个任务函数中,调用这个任务希望实现telnet等基本功能,总是失败,最后我发现是不能进入总是进不去 EXTI2_IRQHandler(void)中断。我把中断这一块屏蔽了,在任务函数中加入
- if (ETH_GetRxPktSize()!=0)
- {
- LwIP_Pkt_Handle();
- }
复制代码
这样就发现没有问题了,各项功能都能实现。为什么加上系统之后外部中断没有问题而 网络中断不能进入,需要修改其他方面设置吗? 我又在官网下载了STM32F107通过以太网实现在程序中编程(IAP) 就 是an3226.进行了简单的修改能在金牛板子上运行了。首先我将例程修改为通过 EXTI2_IRQHandler(void)中断实现TELNET,这样成功,这说明我对EXTI2_IRQHandler (void)的初始化是成功了。再次基础之上又做了freertos的移植,但是还是不成功。 在freertos下如何设置中断才能进如voidETH_IRQHandler(void),还有什么方面存 在问题。菜鸟一个问的条理性不太好希望有人帮忙,万分感激~~~
答:这个问题发生的远不能因是你没有处理好中断,你还是处理一下吧.注意系统中中断向量列表处理.
29、keil环境下,如何将函数定义到指定的FLASH地址
问:keil环境下,如何将函数定义到指定的FLASH地址?定义常量变量到指定地址我知道可以通过__attribute__((at(addr))),但是函数的定义不会啊!
答:#program ROM 类似的语句,详情你可以参考帮助
30、STM32103 USART1死机
问:
- void USART_Receive(USART_TypeDef* USARTx)
- {
- if (USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==SET)
- {
- USART_ClearFlag(USARTx,USART_FLAG_RXNE);
- s[0]=USART_ReceiveData(USART1);
- delay(1000);
- s[1]=USART_ReceiveData(USART1);
- delay(1000);
- s[2]=USART_ReceiveData(USART1);
- delay(1000);
- write_char(s[0],s[1],s[2]); //发送数据到PC
- //if(s[0]==0xff){GPIO_WriteBit(GPIOE,GPIO_Pin_0,Bit_SET);} // //write_char(s[0],s[1],s[2]);
- // query_uart_command(); //命令判断
- }
- }
复制代码
上面程序在
发送FF的时候收到FF FF FF
发送FF 22的时候收到FF 22 22
发送FF 22 33时收到FF 22 22
之后再发送数据时串口不响应!!!
最佳答案:
stm32串口有个可以说是bug的地方,就是即使不使能溢出等其他错误中断的情况下,若发生溢出错误,仍会进入中断,而且常规检查中断的方法无法查到中断标志。所以办法就是在串口正常中断处理之后加清除中断的语句。具体网上可以找到。之前因为这个原因,程序经常死掉,结果是死在串口中断处理里,不停中断,有没有清除中断标志哦。
31、关于STM32读取陀螺仪的是电压值,怎么经过积分变成角度的问题
问:请问下,STM32读取陀螺仪的是电压值,怎么经过积分变成角度?而且积分函数怎么写呢?
答:陀螺仪有个参数a,叫做灵敏度,单位是(°/s/V),有个参数b,叫静止电压,单位是(V).
你写的程序有个参数叫做采样率c,单位是(S/s),有一个叫做ADC基准d,单位(V),有一个叫做ADC分辨率e,没有量纲,还有一个ADC输入值f.
知道什么叫做积分,什么叫做微分吗?能够不背概念,按照自己的理解说一遍吗? 假设,每次采样的u分别为u1,u2,u3,...u1000,
令v=u1+u2+u3+...+u1000,v就是从u1到u1000的采样时间内角度的偏差. 就是从采u1到采u1000期间,陀螺仪转过的。
32、STM32F107可以和TI的无线接发模块CC2520配合使用吗?
问:STM32F107可以和TI的无线接发模块CC2520配合使用吗?如果可以,可以怎么实现呢?烦请各位大侠多多赐教!小弟刚刚接触这方面的内容。再次拜谢!
答:无线接发模块CC2520是什么接口,i2c,UART,SPI?主要是看接口支不支持。。
33、关于STM32自带的bootloader的功能
问:STM32F107:memory mapping地址0x00000000-0x0003FFFF中存放的是什么?如果是历程,则主要是做什么功能,这段程序能不能被读出?
答:在系统复位后,SYSCLK的第4个上升沿,BOOT引脚的值将被锁存。用户可以通过设置BOOT1和BOOT0引脚的状态,来选择在复位后的启动模式。 在从待机模式退出时,BOOT引脚的值将被被重新锁存;因此,在待机模式下BOOT引脚应保持为需要的启动配置。在启动延迟之后,CPU从地址0x0000 0000获取堆栈顶的地址,并从启动存储器的0x0000 0004指示的地址开始执行代码。这段代码被固定在MCU内,不能通过外部来修改。
34、关于STM32的代码加密问题
问:产品选用STM32F103,目前电路设计仅留了20pin的JTAG口。请问一下该如何加密。据说如果采用JLINK的secure选项加密,JLINK以后是无法识别和擦除的,请问一下该如何加密。目前串口、RST、BOOT脚单板上没有预留。谢谢。
答:Jlink加密以后,将不能读取FLASH中的内容,但是可以通过JFlashARM先将FLASH擦除掉,再进行新的程序烧写。
35、VDD与VSS的去藕电容如何处理?
问:VDD与VSS的去藕电容如何处理?
答:1、每对VDD与VSS都必须在尽可能靠近芯片处分别放置一个10nF~100nF的高频瓷介电容 2、在靠近VDD3和VSS3的地方放置一个4.7μF~10μF的钽电容或瓷介电容
36、stm32f107 每次ping通要重上电
问:您好,请教一下,107的芯片,phy是lan8700,仿照STM32F107_LK做的硬件,官方例程,mii模式,但是下载之后每次需要重新插拔电源才行,按下rst键或者下载都无法ping通,看了一下,phy初始化已经完成,不知道是哪里有问题,谢谢给分析下。
答:应该是你发送完毕数据以后,没有结束。你仿真一下,PING完以后,下一次ping的时候,程序运行的状况。至少你没有加PHY的reset,要不不会每次reset都无法ping通
37、仿真问题
问:keil4 STM32仿真里面怎样给USART1送入数据?
答:软件仿真的话,可以监视到USART1接收的数据。但要是给USART1送入数据的时候我一般用JLINK硬件仿真,加上电脑的串口助手发送。仿真中可以在USART1中设置断点查看数据是否发送成功(中断接收的时候)。
38、关于STM32 寄存器变量
问:STM32 寄存器变量 #define __IO volatile __IO uint32_t USART_Rx_Done = 0; USART_Rx_Done = 1;
怎样知道这个寄存器变量的地址,它是一个标志位 应该是有地址的 为什么在KEil中看不到
答:都在标准库里,你只能编译后,工程里包含的库文件才会出来,然后你选中寄存器变量,点右键,然后选择里面一个“涉及此参数”的选择。就可以找到地址了。
39、程序问题
问:SET == USART_GetFlagStatus(USART1, USART_FLAG_RXNE) 这句话是什么意思
答:当接收引脚有数据时,状态寄存器的USART_FLAG_RXNE就会为1,此时USART_GetFlagStatus(USART1, USART_FLAG_RXNE)的返回值就为1(SET),若无数据则为RESET,本语句一般用于while(SET == USART_GetFlagStatus(USART1, USART_FLAG_RXNE)),或if语句作为检测或判断条件
40、STM32重映射
问:为了使不同器件封装的外设I/O 功能的数量达到最优,可以把一些复用功能重新映射到其他一些脚上。这里的映射到其他脚上的意义是不是,假设GPIOA的PA1的复用功能是ADC1,那么是不是可以通过改变映射地址,将其映射到GPIOB的PB1上。
答:重映射的作用简单的说就是把管脚的外设功能映射到另一个管脚,但是不是可以随便映射的,具体对应关系参考手册上的管脚说明。比如USART2_TX默认在PA2管脚,当启用复用功能后就会将PD5管脚作为USART2_TX。另外也不是所有的管脚功能都能重映射,比如ADC1_IN0就只能在PA0。
41、STM32F417ZG批产烧程序
问:请问如何批量烧程序,源代码是不能给工人的,只能是编译好的二进制机器码。用的是正版的iar jlinkV8,找了几天没找到能够直接下载二进制的功能。uart串口方式烧写太麻烦了,而且产品不用串口。
答:可以,安装jlink的时候有一个J-Flash ARM的程序,这个可以直接烧写bin文件。 |