本帖最后由 jinglixixi 于 2023-2-14 14:04 编辑
APM32F107开发板提供了较为丰富的例程,通过下载SDK压缩包即可达到,解压后其例程文件夹如图1所示。 图1 例程文件夹
在没有其它显示器件的情况下,串口就是必不可少的工具了,于是先对串口通信功能进行一下测试。 在开发板上,配有RS232的串行接口电路,见图2和图3所示。 由此可知,共用2个串口可用,即UART1和UART2,其中: PA9 ---U1_TX PA10---U1_RX PA2 ---U2_TX PA3---U2RX
在使用时,通过J3上的短接子就可进行串口的切换。 图2 串行接口线路
图3 串行接口电路
为验证串口通信功能,这里选取的是例程USART_Printf。由于电脑上没提供RS232接口,故采用USB转TTL模块来测试,其线路连接见图4所示。 图4 测试连接
在下载程序后,其运行效果如图5所示。 图5 运行效果
比较讨厌的是在输出的结果中总是多出一个“\0”,通过对程序的分析,分析是for循环的条件有问题。此外,许数串口设备的波特率是9600bps,故一同也进行了修改,修改后的程序如下: volatile uint32_t tick = 0;
uint8_t txBuf[] = "Hello USART1 \n\r";
int main(void)
{
uint8_t i;
GPIO_Config_T GPIO_ConfigStruct;
USART_Config_T USART_ConfigStruct;
APM_MINI_LEDInit(LED2);
RCM_EnableAPB2PeriphClock((RCM_APB2_PERIPH_T)(RCM_APB2_PERIPH_GPIOA | RCM_APB2_PERIPH_USART1));
GPIO_ConfigStruct.mode = GPIO_MODE_AF_PP;
GPIO_ConfigStruct.pin = GPIO_PIN_9;
GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOA, &GPIO_ConfigStruct);
//USART_ConfigStruct.baudRate = 115200;
USART_ConfigStruct.baudRate = 9600;
USART_ConfigStruct.hardwareFlow = USART_HARDWARE_FLOW_NONE;
USART_ConfigStruct.mode = USART_MODE_TX;
USART_ConfigStruct.parity = USART_PARITY_NONE;
USART_ConfigStruct.stopBits = USART_STOP_BIT_1;
USART_ConfigStruct.wordLength = USART_WORD_LEN_8B;
USART_Config(USART1, &USART_ConfigStruct);
USART_Enable(USART1);
SysTick_Config(SystemCoreClock / 1000);
while(1)
{
Delay();
//for(i = 0; i < sizeof(txBuf); i++)
for(i = 0; i < (sizeof(txBuf)-1); i++)
{
while(USART_ReadStatusFlag(USART1, USART_FLAG_TXBE) == RESET);
USART_TxData(USART1, txBuf[i]);
}
APM_MINI_LEDToggle(LED2);
}
}
这样再运行程序,其结果就正常了,见图6所示。 图6 修改后的效果
如果以RS485模块来与板上的串口连接,则可实现RS485设备间的串行通讯,当然在通讯时要有相应的协议来辅助管理通讯过程。
|