一个测量空间角度的加速度器的例程
文件说明:
project.eww :Workspace Data 工作空间
project.ewd :Debugger Data. 调试器数据
project.ewp : IAR Project 项目文件
上面3个文件IAR系统的工程配置文件
stm32f10x_flash.icf : 这个文件是IAR连接器配置文件。配置程序段(只读)在CPU内部Flash
数据段(可读写的,堆和栈)在CPU内部RAM。你可以根据自己需要进行修改。
stm32f10x_ram.icf : 这个文件是IAR连接器配置文件。配置程序段(只读)和数据段(可读写的,堆和栈)
都在CPU内部RAM。你可以根据自己需要进行修改。
cpu_ram.mac : 在CPU内部RAM调试时的宏文件, 包含修改中断向量表的代码
ext_sram : 在CPU内部RAM调试时的宏文件, 包含配置FSMC总线和修改中断向量表的代码
使用方法:
(1) 双击 Project.eww,启动IAR开发环境
(2) 重新编译连接所有文件: Project->Rebuild all
(3) 装载镜像 : Project->Debug
(4) 运行程序 :Debug->Go(F5)
单片机源程序如下:
- #include "stm32f10x.h"
- #include <stdio.h>
- #include "usart_printf.h"
- #define RCC_APB2Periph_GPIO_CAN RCC_APB2Periph_GPIOB
- #define GPIO_Remap_CAN GPIO_Remap1_CAN1
- #define GPIO_CAN GPIOB
- #define GPIO_Pin_CAN_RX GPIO_Pin_8
- #define GPIO_Pin_CAN_TX GPIO_Pin_9
- typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
- /* Private define ------------------------------------------------------------*/
- /* Private macro -------------------------------------------------------------*/
- /* Private variables ---------------------------------------------------------*/
- __IO uint32_t ret = 0; /* for return of the interrupt handling */
- volatile TestStatus TestRx;
- /* Private function prototypes -----------------------------------------------*/
- void NVIC_Configuration(void);
- TestStatus CAN_Polling(void);
- TestStatus CAN_Interrupt(void);
- void RCC_Configuration(void);
- void GPIO_Configuration(void);
- int main(void)
- {
- /* Setup STM32 system (clock, PLL and Flash configuration) */
- SystemInit();
- /* CAN1 Periph clock enable */
- RCC_Configuration();
- USART_Configuration();/* 配置串口 */
- GPIO_Configuration();
- /* NVIC Configuration */
- NVIC_Configuration();
- /* CAN transmit at 100Kb/s and receive by polling in loopback mode */
- TestRx = CAN_Polling();
- while (1) ;
- {
- }
-
- }
- void RCC_Configuration(void)
- {
- /* GPIO clock enable */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIO_CAN, ENABLE);
- /* CAN1 Periph clock enable */
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
- }
- void GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /* Configure CAN pin: RX */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CAN_RX;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIO_CAN, &GPIO_InitStructure);
- /* Configure CAN pin: TX */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CAN_TX;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIO_CAN, &GPIO_InitStructure);
- GPIO_PinRemapConfig(GPIO_Remap_CAN , ENABLE);
- }
- TestStatus CAN_Polling(void)
- {
- CAN_InitTypeDef CAN_InitStructure;
- CAN_FilterInitTypeDef CAN_FilterInitStructure;
- CanTxMsg TxMessage;
- CanRxMsg RxMessage;
- uint32_t i = 0;
- uint8_t TransmitMailbox = 0;
- /* CAN register init */
- CAN_DeInit(CAN1);
- CAN_StructInit(&CAN_InitStructure);
- /* CAN cell init */
- CAN_InitStructure.CAN_TTCM=DISABLE;
- CAN_InitStructure.CAN_ABOM=DISABLE;
- CAN_InitStructure.CAN_AWUM=DISABLE;
- CAN_InitStructure.CAN_NART=DISABLE;
- CAN_InitStructure.CAN_RFLM=DISABLE;
- CAN_InitStructure.CAN_TXFP=DISABLE;
- CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;
- //CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;
- CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
- CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
- CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
- CAN_InitStructure.CAN_Prescaler=5;
- CAN_Init(CAN1, &CAN_InitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber=0;
- CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
- CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
- CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment=0;
- CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* transmit */
- TxMessage.StdId=0x11;
- TxMessage.RTR=CAN_RTR_DATA;
- TxMessage.IDE=CAN_ID_STD;
- TxMessage.DLC=2;
- TxMessage.Data[0]=0xCA;
- TxMessage.Data[1]=0xFE;
- TransmitMailbox=CAN_Transmit(CAN1, &TxMessage);
- i = 0;
- while((CAN_TransmitStatus(CAN1, TransmitMailbox) != CANTXOK) && (i != 0xFF))
- {
- i++;
- }
- i = 0;
- while((CAN_MessagePending(CAN1, CAN_FIFO0) < 1) && (i != 0xFF))
- {
- i++;
- }
- /* receive */
- RxMessage.StdId=0x00;
- RxMessage.IDE=CAN_ID_STD;
- RxMessage.DLC=0;
- RxMessage.Data[0]=0x00;
- RxMessage.Data[1]=0x00;
- CAN_Receive(CAN1, CAN_FIFO0, &RxMessage);
- if (RxMessage.StdId!=0x11)
- {
- return FAILED;
- }
- if (RxMessage.IDE!=CAN_ID_STD)
- {
- return FAILED;
- }
- if (RxMessage.DLC!=2)
- {
- return FAILED;
- }
- if ((RxMessage.Data[0]<<8|RxMessage.Data[1])!=0xCAFE)
- {
- return FAILED;
- }
- return PASSED; /* Test Passed */
- }
- TestStatus CAN_Interrupt(void)
- {
- CAN_InitTypeDef CAN_InitStructure;
- CAN_FilterInitTypeDef CAN_FilterInitStructure;
- CanTxMsg TxMessage;
- uint32_t i = 0;
- /* CAN register init */
- CAN_DeInit(CAN1);
- CAN_StructInit(&CAN_InitStructure);
- /* CAN cell init */
- CAN_InitStructure.CAN_TTCM=DISABLE;
- CAN_InitStructure.CAN_ABOM=DISABLE;
- CAN_InitStructure.CAN_AWUM=DISABLE;
- CAN_InitStructure.CAN_NART=DISABLE;
- CAN_InitStructure.CAN_RFLM=DISABLE;
- CAN_InitStructure.CAN_TXFP=DISABLE;
- CAN_InitStructure.CAN_Mode=CAN_Mode_LoopBack;
- CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
- CAN_InitStructure.CAN_BS1=CAN_BS1_8tq;
- CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
- CAN_InitStructure.CAN_Prescaler=1;
- CAN_Init(CAN1, &CAN_InitStructure);
- /* CAN filter init */
- CAN_FilterInitStructure.CAN_FilterNumber=1;
- CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;
- CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;
- CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;
- CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
- CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
- CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
- CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;
- CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;
- CAN_FilterInit(&CAN_FilterInitStructure);
- /* CAN FIFO0 message pending interrupt enable */
- CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
- /* transmit 1 message */
- TxMessage.StdId=0x00;
- TxMessage.ExtId=0x1234;
- TxMessage.IDE=CAN_ID_EXT;
- TxMessage.RTR=CAN_RTR_DATA;
- TxMessage.DLC=2;
- TxMessage.Data[0]=0xDE;
- TxMessage.Data[1]=0xCA;
- CAN_Transmit(CAN1, &TxMessage);
- /* initialize the value that will be returned */
- ret = 0xFF;
- /* receive message with interrupt handling */
- i=0;
- while((ret == 0xFF) && (i < 0xFFF))
- {
- i++;
- }
- if (i == 0xFFF)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
Goniometer_code.rar
(480.75 KB, 下载次数: 12)
|