完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
说实话,串口使用真的很简单,至少在单片机上我是这样认为的,但是当我拿到这块板子后,连串口的时候就懵逼了,下面来看看我走过的路吧! 首先当然是写一个简单的通信程序了,这就不详细摆了,直接贴代码: void myusartinit() { //1.ʹÄÜ´®¿ÚʱÖÓ RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //2.ʹÄÜGPIO¶Ë¿ÚʱÖÓ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //3.¶Ë¿Ú¸´Óà GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //4.³õʼ»¯¶Ë¿Ú GPIO_InitTypeDefGPIO_InitTypestructure; GPIO_InitTypestructure.GPIO_Mode=GPIO_Mode_AF; GPIO_InitTypestructure.GPIO_OType=GPIO_OType_PP; GPIO_InitTypestructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3; GPIO_InitTypestructure.GPIO_PuPd=GPIO_PuPd_UP; GPIO_InitTypestructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitTypestructure); //5.³õʼ»¯´®¿Ú USART_InitTypeDefUSART_InitTypestructure; USART_InitTypestructure.USART_BaudRate=9600; USART_InitTypestructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; USART_InitTypestructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx; USART_InitTypestructure.USART_Parity=USART_Parity_No; USART_InitTypestructure.USART_StopBits=USART_StopBits_1; USART_InitTypestructure.USART_WordLength=USART_WordLength_8b; USART_ClearFlag(USART2, USART_FLAG_TC); USART_Init(USART2,&USART_InitTypestructure); //6.ʹÄÜ´®¿Ú USART_Cmd(USART2,ENABLE); //7.³õʼ»¯ÖÐ¶Ï NVIC_InitTypeDefNVIC_InitTypestucture; NVIC_InitTypestucture.NVIC_IRQChannel=USART2_IRQn; NVIC_InitTypestucture.NVIC_IRQChannelCmd=ENABLE; NVIC_InitTypestucture.NVIC_IRQChannelPreemptionPriority=1; NVIC_InitTypestucture.NVIC_IRQChannelSubPriority=1; NVIC_Init(&NVIC_InitTypestucture); USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); } int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); myusartinit(); while(1); // { // USART_SendData(USART2,res); // Delay(1500); // res++; // } // } void USART2_IRQHandler(void) { u8 res,res1; res1='b'; // while(1) // { // USART_SendData(USART2,res); // } if(USART_GetITStatus(USART2,USART_IT_RXNE)) { res =USART_ReceiveData(USART2); //USART_SendData(USART2,'a'); USART2->DR =res1; USART_ClearFlag(USART2,USART_FLAG_TC); } } /** * @brief Inserts a delay time. * @param nTime: specifies the delay time length, in 10ms. * @retval None */ void Delay(__IO uint32_t nTime) { TimingDelay = nTime; while(TimingDelay) TimingDelay--; } /** * @brief Decrements the TimingDelay variable. * @param None * @retval None */ void TimingDelay_Decrement(void) { if (TimingDelay !=0x00) { TimingDelay--; } } 注释部分有乱码,还是加个图吧! 好了,程序OK! 开始调试,上板,这里我就开始懵逼了, 首先是这样的问题:下载程序没问题,但是串口死活就是接收发送都没反应。想想不对啊,调试发现各个部件正常工作,排除软件问题,那就只能从硬件上看看了,把电路板原理图找出来,下图发现了问题: 要把板子背后b62,63两个点分别连起来(0欧电阻),对于这个设计我也是跪了, 好了连起来后,开心的打开了串口工具! 第二次懵逼了, 问题二:只打印一个字:畴 通过十六进制看了看,什么FE,FC的,不同的数据有变化,但是高4位基本都是1,这我就想不通了,还好,看看了前人的试用报告,有提到板载晶振的问题的帖子,大概意思就是原厂的库函数使用的是25M的晶振,但是我们的晶振不一样,就要改,看了一下,我靠,确实是8M晶振,贴子上说是这样改的(其实我觉得在那加都一样),在这里几行代码: |
|
相关推荐
|
|
STM32CUBEMX(13)--SPI,W25Q128外部Flash移植
1769 浏览 0 评论
OV7670摄像头使用串口发送数据到另一个板子上的lcd,出现花屏
1783 浏览 1 评论
1129 浏览 0 评论
761 浏览 0 评论
STM32CUBEMX(12)--IIC,12864OLED(0.96寸)移植
1153 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-14 10:44 , Processed in 0.410361 second(s), Total 39, Slave 30 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号