From afbb4cc73c44b6321cae39dbe46b97155805097d Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sun, 13 Dec 2015 21:03:11 +0100 Subject: wip --- .../CAN/Networking/main.c | 350 +++++++++++++++++++++ 1 file changed, 350 insertions(+) create mode 100644 tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/CAN/Networking/main.c (limited to 'tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/CAN/Networking/main.c') diff --git a/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/CAN/Networking/main.c b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/CAN/Networking/main.c new file mode 100644 index 0000000..fca0acd --- /dev/null +++ b/tmp/STM32F10x_StdPeriph_Lib_V3.5.0/Project/STM32F10x_StdPeriph_Examples/CAN/Networking/main.c @@ -0,0 +1,350 @@ +/** + ****************************************************************************** + * @file CAN/Networking/main.c + * @author MCD Application Team + * @version V3.5.0 + * @date 08-April-2011 + * @brief Main program body + ****************************************************************************** + * @attention + * + * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS + * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE + * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY + * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING + * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE + * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. + * + *

© COPYRIGHT 2011 STMicroelectronics

+ ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "stm32f10x.h" +#include "platform_config.h" + +/** @addtogroup STM32F10x_StdPeriph_Examples + * @{ + */ + +/** @addtogroup CAN_Networking + * @{ + */ + + +/* Private typedef -----------------------------------------------------------*/ +/* Private define ------------------------------------------------------------*/ +#define __CAN1_USED__ +/* #define __CAN2_USED__*/ + +#ifdef __CAN1_USED__ + #define CANx CAN1 + #define GPIO_CAN GPIO_CAN1 + #define GPIO_Remapping_CAN GPIO_Remapping_CAN1 + #define GPIO_CAN GPIO_CAN1 + #define GPIO_Pin_CAN_RX GPIO_Pin_CAN1_RX + #define GPIO_Pin_CAN_TX GPIO_Pin_CAN1_TX +#else /*__CAN2_USED__*/ + #define CANx CAN2 + #define GPIO_CAN GPIO_CAN2 + #define GPIO_Remapping_CAN GPIO_Remap_CAN2 + #define GPIO_CAN GPIO_CAN2 + #define GPIO_Pin_CAN_RX GPIO_Pin_CAN2_RX + #define GPIO_Pin_CAN_TX GPIO_Pin_CAN2_TX +#endif /* __CAN1_USED__ */ + +#define KEY_PRESSED 0x01 +#define KEY_NOT_PRESSED 0x00 + +/* Private macro -------------------------------------------------------------*/ +/* Private variables ---------------------------------------------------------*/ +CAN_InitTypeDef CAN_InitStructure; +CAN_FilterInitTypeDef CAN_FilterInitStructure; +CanTxMsg TxMessage; +uint8_t KeyNumber = 0x0; + +/* Private function prototypes -----------------------------------------------*/ +void NVIC_Config(void); +void CAN_Config(void); +void LED_Display(uint8_t Ledstatus); +void Init_RxMes(CanRxMsg *RxMessage); +void Delay(void); + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /*!< At this stage the microcontroller clock setting is already configured, + this is done through SystemInit() function which is called from startup + file (startup_stm32f10x_xx.s) before to branch to application main. + To reconfigure the default setting of SystemInit() function, refer to + system_stm32f10x.c file + */ + + /* NVIC configuration */ + NVIC_Config(); + + /* Configures LED 1..4 */ + STM_EVAL_LEDInit(LED1); + STM_EVAL_LEDInit(LED2); + STM_EVAL_LEDInit(LED3); + STM_EVAL_LEDInit(LED4); + + /* Configure Push button key */ + STM_EVAL_PBInit(BUTTON_KEY, BUTTON_MODE_GPIO); + + /* CAN configuration */ + CAN_Config(); + + CAN_ITConfig(CANx, CAN_IT_FMP0, ENABLE); + + /* turn off all leds*/ + STM_EVAL_LEDOff(LED1); + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + + /* Infinite loop */ + while(1) + { + while(STM_EVAL_PBGetState(BUTTON_KEY) == KEY_PRESSED) + { + if(KeyNumber == 0x4) + { + KeyNumber = 0x00; + } + else + { + LED_Display(++KeyNumber); + TxMessage.Data[0] = KeyNumber; + CAN_Transmit(CANx, &TxMessage); + Delay(); + + while(STM_EVAL_PBGetState(BUTTON_KEY) != KEY_NOT_PRESSED) + { + } + } + } + } +} + +/** + * @brief Configures the CAN. + * @param None + * @retval None + */ +void CAN_Config(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* GPIO clock enable */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); +#ifdef __CAN1_USED__ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_CAN1, ENABLE); +#else /*__CAN2_USED__*/ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_CAN1, ENABLE); + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_CAN2, ENABLE); +#endif /* __CAN1_USED__ */ + /* 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_Remapping_CAN , ENABLE); + + /* CANx Periph clock enable */ +#ifdef __CAN1_USED__ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); +#else /*__CAN2_USED__*/ + RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); + RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE); +#endif /* __CAN1_USED__ */ + + + /* CAN register init */ + CAN_DeInit(CANx); + 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_Normal; + + /* CAN Baudrate = 1MBps*/ + CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; + CAN_InitStructure.CAN_BS1 = CAN_BS1_3tq; + CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq; + CAN_InitStructure.CAN_Prescaler = 4; + CAN_Init(CANx, &CAN_InitStructure); + + /* CAN filter init */ +#ifdef __CAN1_USED__ + CAN_FilterInitStructure.CAN_FilterNumber = 0; +#else /*__CAN2_USED__*/ + CAN_FilterInitStructure.CAN_FilterNumber = 14; +#endif /* __CAN1_USED__ */ + 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 = 0x321; + TxMessage.ExtId = 0x01; + TxMessage.RTR = CAN_RTR_DATA; + TxMessage.IDE = CAN_ID_STD; + TxMessage.DLC = 1; +} + +/** + * @brief Configures the NVIC for CAN. + * @param None + * @retval None + */ +void NVIC_Config(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); + +#ifndef STM32F10X_CL +#ifdef __CAN1_USED__ + NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn; +#else /*__CAN2_USED__*/ + /* CAN2 is not implemented in the device */ + #error "CAN2 is implemented only in Connectivity line devices" +#endif /*__CAN1_USED__*/ +#else +#ifdef __CAN1_USED__ + NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; +#else /*__CAN2_USED__*/ + NVIC_InitStructure.NVIC_IRQChannel = CAN2_RX0_IRQn; +#endif /*__CAN1_USED__*/ + +#endif /* STM32F10X_CL*/ + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + NVIC_Init(&NVIC_InitStructure); +} + +/** + * @brief Initializes a Rx Message. + * @param CanRxMsg *RxMessage + * @retval None + */ +void Init_RxMes(CanRxMsg *RxMessage) +{ + uint8_t i = 0; + + RxMessage->StdId = 0x00; + RxMessage->ExtId = 0x00; + RxMessage->IDE = CAN_ID_STD; + RxMessage->DLC = 0; + RxMessage->FMI = 0; + for (i = 0;i < 8;i++) + { + RxMessage->Data[i] = 0x00; + } +} + +/** + * @brief Turn ON/OFF the dedicate led + * @param Ledstatus: Led number from 0 to 3. + * @retval None + */ +void LED_Display(uint8_t Ledstatus) +{ + /* Turn off all leds */ + STM_EVAL_LEDOff(LED1); + STM_EVAL_LEDOff(LED2); + STM_EVAL_LEDOff(LED3); + STM_EVAL_LEDOff(LED4); + + switch(Ledstatus) + { + case(1): + STM_EVAL_LEDOn(LED1); + break; + + case(2): + STM_EVAL_LEDOn(LED2); + break; + + case(3): + STM_EVAL_LEDOn(LED3); + break; + + case(4): + STM_EVAL_LEDOn(LED4); + break; + default: + break; + } +} + +/** + * @brief Delay + * @param None + * @retval None + */ +void Delay(void) +{ + uint16_t nTime = 0x0000; + + for(nTime = 0; nTime <0xFFF; nTime++) + { + } +} + +#ifdef USE_FULL_ASSERT + +/** + * @brief Reports the name of the source file and the source line number + * where the assert_param error has occurred. + * @param file: pointer to the source file name + * @param line: assert_param error line source number + * @retval None + */ +void assert_failed(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} + +#endif + +/** + * @} + */ + +/** + * @} + */ + +/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/ -- cgit v1.2.3