1.板子收到有几天了,一直没有没时间看,今天周末,先来发一个评测,不多说上图:
AT32F407系列使用高性能的ARM®Cortex®-M4F 32位的RISC内核,工作频率为240 MHz,Cortex®-M4F内核带有单精度浮运算单元(FPU),支持所有ARM®单精度数据处理指令和数据类型。它还具有一组DSP指令和提高应用安全性的一个存储器保护单元(MPU)。AT32F407系列内置高速存储器(高达1024 K字节的内存和96+128 K字节的SRAM),并可使用外部存储器(高达16 M字节的SPI闪存),丰富的增强I/O端口和联接到两条APB总线的外设。 内置存储器可设置任意范围程序区受sLib保护,成为执行代码安全库区。器件包含3个12位的ADC、 2个12位的DAC、 8个通用16位定时器、 2个通用32位定时器和多达2个PWM定时器,还包含标准和先进的通信接口:多达3个I2C接口、4个SPI接口(复用为I2S接口)、2个SDIO接口、8个USART/UART接口、1个USB接口、2个CAN接口、和1个以太网MAC接口。AT32F407系列工作于-40 °C至+105 ° C的温度范围,供电电压2.6 V至3.6 V,省电模式保证低功耗应用的要求。 不得不说AT32F407的资源相当的丰富。
2.拿到板子,第一件事就是应该找资料了,AT32F407的资料分为在两个地方可以找到。第一个就官网:http://www.arterytek.com/cn/product/AT32F407.jsp?t=1608257958336。第二地方就是12论坛的雅特力的版块:百度云:https://pan.baidu.com/s/1BQQz91QhJcyPF-mLMIsPJw password: t3io Github:https://github.com/Artery-MCU/Artery-AT32-MCU-Pack.git
官网上的资料是特别全,没有厂家提供的DEMO程序,百度云盘里的资料比较全,开发所需要的资料全部都有。
3.资料下载完以后,就可以进行开发了,AT32F407开发板,自带AT -Link-EZ 调试工具,这样就不用我们额外用仿真工具了,这里不得不说,厂家真的良心呀。在开发之前,我们还需要安装AT -Link-EZ 的驱动程序和AT32F407的支持包。这些资料在我们下载下来的资料里都有,而且有入门指南,非常详细,我就不过多废话了。
4.一切准备好了,可以烧录程序开始跑起来了,我用的厂家提供的DEMO程序中的USART来测试,主要是用USART2和USART3,用DMA来传输,USART2TX把数据发送到USART3的RX,USART3TX再把数据发送到USART2的RX,在通过对比USART2TX发送的数据和USART3RX接收到数据,以及USART3TX发送的数据和USART2RX接收到数据是否都相等,相等就把LED2,3,4点亮,硬件上需要把USART3TX和USART2RX,USART2TX和USART3的RX连接起来,实验效果:
主程序:
int main(void)
{
/* System Clocks Configuration */
RCC_Configuration();
/* NVIC configuration */
NVIC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();//初始化IO口,设置USART2和USART3管脚部分映射
/* Initialize Leds mounted on board */
AT32_Board_Init();
/* Configure the DMA */
DMA_Configuration();//DMA参数设置
/* USART2 and USART3 configuration -------------------------------------------*/
/* USART2 and USART3 configured as follow:
- BaudRate = 230400 baud
- Word Length = 8 Bits
- One Stop Bit
- No parity
- Hardware flow control disabled (RTS and CTS signals)
- Receive and transmit enabled
*/
USART_StructInit(&USART_InitStructure);
USART_InitStructure.USART_BaudRate = 230400;//USART设置,波特率为230400
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;
/* Configure USART2 */
USART_Init(USART2, &USART_InitStructure);
/* Configure USART3 */
USART_Init(USART3, &USART_InitStructure);
/* Enable USART2 DMA TX request */
USART_DMACmd(USART2, USART_DMAReq_Tx, ENABLE);
/* Enable USART3 DMA TX request */
USART_DMACmd(USART3, USART_DMAReq_Tx, ENABLE);
/* Enable the USART3 Receive Interrupt */
USART_INTConfig(USART3, USART_INT_RDNE, ENABLE);
/* Enable USART2 */
USART_Cmd(USART2, ENABLE);
/* Enable USART3 */
USART_Cmd(USART3, ENABLE);
/* Enable USART2 DMA TX Channel */
DMA_ChannelEnable(DMA1_Channel7, ENABLE);//
/* Enable USART3 DMA TX Channel */
DMA_ChannelEnable(DMA1_Channel2, ENABLE);
/* Receive the TxBuffer2 */
while(__index < TxBufferSize2)
{
while(USART_GetFlagStatus(USART2, USART_FLAG_RDNE) == RESET)
{
}
RxBuffer1[__index++] = USART_ReceiveData(USART2);
}
/* Wait until USART2 TX DMA1 Channel Transfer Complete */
while (DMA_GetFlagStatus(DMA1_FLAG_TC7) == RESET)
{
}
/* Wait until USART3 TX DMA1 Channel Transfer Complete */
while (DMA_GetFlagStatus(DMA1_FLAG_TC2) == RESET)
{
}
/* Check the received data with the send ones */
TransferStatus1 = Buffercmp(TxBuffer2, RxBuffer1, TxBufferSize2);
/* TransferStatus1 = PASSED, if the data transmitted from USART3 and
received by USART2 are the same */
/* TransferStatus1 = FAILED, if the data transmitted from USART3 and
received by USART2 are different */
TransferStatus2 = Buffercmp(TxBuffer1, RxBuffer2, TxBufferSize1);
/* TransferStatus2 = PASSED, if the data transmitted from USART2 and
received by USART3 are the same */
/* TransferStatus2 = FAILED, if the data transmitted from USART2 and
received by USART3 are different */
/* Judge whether the result is correct */
if((TransferStatus1 == PASSED)&&(TransferStatus2 == PASSED))
{
/*Trun on the LED*/
AT32_LEDn_ON(LED2);
AT32_LEDn_ON(LED3);
AT32_LEDn_ON(LED4);
}
while (1)
{
}
}
|