拿到nucleo板好几天了,一直没时间动手,前2天有时间看了一下,板型为nucleo_f302r8,c01,发现和我想的不太一样,原来是块可扩展核心板,需要外围电路才行,鉴于本人手头暂时没有蓝牙模块,就决定先熟悉板上自带功能吧,以前一直很纳闷,stm搞个VCP干啥,是不是可以用vcp和单片机做通讯呢?那就做个stlink的虚拟串口打印rtc时钟吧,本以为10秒钟搞定,下载完毕,运行,Ok,......,耶,不大对劲,没有数据上传,咋回事?是stlink的虚拟串口有问题吗?因为以前没有用过stlink的vcp功能,好,找块stm32f103通过串口发数据到nucleo的stLink的vcp,收到数据。 这说明vcp没问题,那就说明问题出在我的nucleo串口初始化上,好吧,我找,找,找。。。,终于被俺找到问题了,其中有个语句如下, GPIO_PinAFConfig(GPIOA, GPIO_Pin_2, GPIO_AF_7);8 _& I6 E1 ]! a 但GPIO_PinAFConfig的原型是:void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);& A! k. B) j; J7 p3 a2 I4 x& s 那就把第二个参数改为GPIO_PinSource2,既GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_7). 重编,下载,run,去倒杯水,回到座位, 啊,怎么回事,还是没有显示? why? 好吧,程序尚未调通,码农仍需努力啊。调试发现,RTC_Config()中走到语句:4 B v- T: H3 _" e3 } while (RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {} 就不动了,难道是LSE有问题?打开原理图,找到lse位号,拿起板一看,哟,这stm不是欺负人嘛,竟然没焊32.768KHz晶振,赤果果的欺负俺不懂硬件啊! 好,条条大路通罗马,没有lse, 哪咱就用lsi吧,改完代码,run,谢天谢地,终于见到串口在欢乐的打印数据了,一直不知道lsi精度,那就看看吧,拿来示波器,,不看不知道,一看吓一跳,1s的alarm中断在示波器上竟然是1.060s. 看看lse精度吧,找来旧板子,拆个32768hz晶振焊上,(注意:我这块板上晶振边上的电容电阻都没焊),用示波器一看,那精度,整整1s,一分不多一分不少。 本次经历给俺的经验总结如下:0 O! ^- g* j, x% G# r 1 : 以前不识货,没能领会VCP功能,只从有了VCP,再也不用担心笔记本电脑没有串口了! 2:还是外部晶振靠谱。 |
RE:【Nucleo板开发日志】----- 通过STLINK虚拟串口打印RTC时间
RE:【Nucleo板开发日志】----- 通过STLINK虚拟串口打印RTC时间