[STM32F0] 板子接收PC端发送的数据

[复制链接]
3388|33
 楼主| wu93111 发表于 2015-11-17 17:47 | 显示全部楼层
jjjkkk00 发表于 2015-11-17 17:39
放在类似"stm32f10x_it.c"文件中,同时在头文件(类似"stm32f10x_it.h")中申明。
重点是申明,可以在头文件 ...

这个和.s文件里的有关吗
 楼主| wu93111 发表于 2015-11-17 17:49 | 显示全部楼层
jjjkkk00 发表于 2015-11-17 17:39
放在类似"stm32f10x_it.c"文件中,同时在头文件(类似"stm32f10x_it.h")中申明。
重点是申明,可以在头文件 ...

主要就是我这边板子可以接收到了,但是我发现我定义的中断没调用,是不是和.s文件里的那个什么入口有关?
jjjkkk00 发表于 2015-11-17 17:50 | 显示全部楼层
引申一下:在以后, 你也可以通过修改引导文件(类似startup_stm32f10x_hd.s),来使用自己的命名方式。
通过修改引导文件中的 所有的 USART2_IRQHandler 函数名称  ,替换成你自己想要的命名。
进行平台移植或者移植实时系统的时候,会用到。
jjjkkk00 发表于 2015-11-17 17:52 | 显示全部楼层
wu93111 发表于 2015-11-17 17:49
主要就是我这边板子可以接收到了,但是我发现我定义的中断没调用,是不是和.s文件里的那个什么入口有关? ...

一般新建工程不会改到引导文件的 .s,你不放心的话,就打开看看引导文件有没有被改。
jjjkkk00 发表于 2015-11-17 18:01 | 显示全部楼层
这会有时间了,看了下你这个开发板板子的配置,发现PA2/PA3引脚被设计占用了。
建议换USART1的PA9/PA10来学习串口通信。
如果你仍**PA2/PA3的话,需要看一下开发板的硬件电路图。
无标题.jpg
mmuuss586 发表于 2015-11-17 18:10 | 显示全部楼层
以前写的,仅供参考:
/**
  * @brief  UartInitial
  * @param  None
  * @retval None
  */
static        void        UartInitial(void)
{
                USART_InitTypeDef USART_InitStructure;
                NVIC_InitTypeDef NVIC_InitStructure;
                GPIO_InitTypeDef GPIO_InitStructure;
               
                /* Enable GPIO clock */
                RCC_AHBPeriphClockCmd(USARTx_TX_GPIO_CLK | USARTx_RX_GPIO_CLK, ENABLE);  
                /* Enable USART clock */
                USARTx_APBPERIPHCLOCK(USARTx_CLK, ENABLE);
               
                /* Connect PXx to USARTx_Tx */
                GPIO_PinAFConfig(USARTx_TX_GPIO_PORT, USARTx_TX_SOURCE, USARTx_TX_AF);
               
                /* Connect PXx to USARTx_Rx */
                GPIO_PinAFConfig(USARTx_RX_GPIO_PORT, USARTx_RX_SOURCE, USARTx_RX_AF);
               
                /* Configure USART Tx and Rx as alternate function push-pull */
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_Level_3;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
                GPIO_InitStructure.GPIO_Pin = USARTx_TX_PIN;
                GPIO_Init(USARTx_TX_GPIO_PORT, &GPIO_InitStructure);
               
                GPIO_InitStructure.GPIO_Pin = USARTx_RX_PIN;
                GPIO_Init(USARTx_RX_GPIO_PORT, &GPIO_InitStructure);
                       
                USART_DeInit(USART1);
               
                /* USARTx configured as follow:
                                        - BaudRate = 115200 baud  
                                        - Word Length = 8 Bits
                                        - One Stop Bit
                                        - No parity
                                        - Hardware flow control disabled (RTS and CTS signals)
                                        - Receive and transmit enabled
                */
                USART_InitStructure.USART_BaudRate = 115200;
                USART_InitStructure.USART_WordLength = USART_WordLength_8b;
                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(USART1, &USART_InitStructure);       
               
                USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
                /* NVIC configuration */
                /* Enable the USARTx Interrupt */
                NVIC_InitStructure.NVIC_IRQChannel = USARTx_IRQn;
                NVIC_InitStructure.NVIC_IRQChannelPriority = 0;
                NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
                NVIC_Init(&NVIC_InitStructure);
               
                USART_Cmd(USART1,ENABLE);
}
 楼主| wu93111 发表于 2015-11-17 18:47 | 显示全部楼层
jjjkkk00 发表于 2015-11-17 18:01
这会有时间了,看了下你这个开发板板子的配置,发现PA2/PA3引脚被设计占用了。
建议换USART1的PA9/PA10来学 ...

好,谢谢大哥了
 楼主| wu93111 发表于 2015-11-17 18:48 | 显示全部楼层
mmuuss586 发表于 2015-11-17 18:10
以前写的,仅供参考:
/**
  * @brief  UartInitial

恩,谢谢
捉虫天师 发表于 2015-11-17 18:56 | 显示全部楼层
直接通过USB口不行的,调试器没有和串口连接,这个系列都是这样
yklstudent 发表于 2015-11-17 19:45 | 显示全部楼层
wu93111 发表于 2015-11-17 14:50
你的这个没有中断处理函数吗,大哥,基于我上面的代码,我的中断处理函数应该放在哪里让他调用 ...

void Modbus_IRQHandler(void)
{
        if (USART_GetITStatus(cCOM1, USART_IT_RXNE) == SET)
        {
                USART_ClearITPendingBit(cCOM1, USART_IT_RXNE);
                prvvUARTRxISR();
        }
        if (USART_GetITStatus(cCOM1, USART_IT_TXE) == SET)
        {
                USART_ClearITPendingBit(cCOM1, USART_IT_TXE);
                prvvUARTTxReadyISR();
        }
}
 楼主| wu93111 发表于 2015-11-17 20:00 | 显示全部楼层
yklstudent 发表于 2015-11-17 19:45
void Modbus_IRQHandler(void)
{
        if (USART_GetITStatus(cCOM1, USART_IT_RXNE) == SET)

我想错了,开始的时候我的已经可以接受了,但我发现我定义的中断处理函数没地调用
gaochy1126 发表于 2015-11-18 06:37 | 显示全部楼层
你的映射使能了吗?
diweo 发表于 2015-11-18 08:24 | 显示全部楼层
LZ思路比较混乱,表现为代码的混乱。
1,初始化一般按着顺序来,比较不容易出错。先开时钟,再IO,再USART,再中断。
2,NVIC功能很强大,初学者一开始接触可能有点怵,其实没必要。初学时最多用到1~2个中断,你把它们使能就可以了,不要去管优先级什么的。因为所有中断有默认优先级。初学者的中断程序都是很简单的,不要考虑那么复杂。
3,中断函数怎么“调用”,或者说放哪里?起什么名字?。一般情况下也很简单。比如你要用USART2的中断,那么只需要写一个USART2_IRQHandler()就可以了。这个函数定义可以放在任何一个.c文件的任何地方!不需要写函数声明,因为默认的启动文件里面已经声明好了。
4,在中断函数里USART_SendData(USART2,USART_ReceiveData(USART2));
                 while (!USART_GetFlagStatus(USART2,USART_FLAG_TC));是不行的。
可以把发送中断完成也打开,再写相应代码。
5,USART_SendData(USART2, 0x5555);也是不对的。因为串口只能发1个字节,你试试发送USART_SendData(USART2, 0x4455);你就看出问题了。
zhoupxa 发表于 2015-11-18 09:22 | 显示全部楼层
觉得解决这类问题还是仔细看看规格书、应用笔记以及例程得好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部